⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jguangbo.pas

📁 这是一个非常好的教师和学生沟通用的电子教室!
💻 PAS
字号:
unit jGuangbo;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Menus, wsocket, jpeg,
  VCLUnZip, ThdTimer;

type
  TjGuangbof = class(TForm)
    Label1: TLabel;
    Image1: TImage;
    PopupMenu1: TPopupMenu;
    VCLUnZip1: TVCLUnZip;
    DxTimer1: TThreadedTimer;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormShow(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
    procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DxTimer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  jGuangbof: TjGuangbof;
  wsh_move: boolean; //是否遥控,是否移动
  pingmu_state: string;
implementation
uses main;
{$R *.DFM}

procedure TjGuangbof.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DXTimer1.Enabled := false;
  bmpstream.clear; //释放内存流
  drawstream.clear;

//  Image1.Canvas.Brush.Color := clBLack;
//  Image1.Canvas.FillRect(rect(0, 0, image1.width, image1.height));
end;

procedure TjGuangbof.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  i: smallint;
begin
  if (key = VK_F11) and (ssShift in Shift) then //停止接收屏幕广播
  begin
    if pingmu_state = '遥控辅导' then
    begin
      form1.wsockethook.SendStr('up:=' + inttostr($10));
      sleep(1);
      form1.wsockethook.SendStr('up:=' + inttostr($11));
      sleep(1);
      form1.wsockethook.SendStr('up:=' + inttostr($12));
      sleep(1);
      pingmu_state := '';
    end;
    DXTimer1.Enabled := false;
    try
      if wsh_socket[s_selected].State <> wsClosed then
        wsh_socket[s_selected].SendStr('/*csh*/:' + #13 + #10 + '停止示范');

    finally
      form1.Wsocket.Close; //关闭通讯
      hua_ok := false;
      Image1.Canvas.Brush.Color := clBLack;
      Image1.Canvas.FillRect(rect(0, 0, screen.width, screen.height));
    end;
 //  sleep(50);
    if pingmu_state = '示范教学' then
      for i := 0 to student_count - 1 do //停止别的学生机接收广播
      begin
        if (form1.ListView1.Items[i].imageindex <> 0) and (form1.listView1.Items[i].Selected <> true) then
          if wsh_socket[i].State <> wsClosed then
            wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '停止广播');
            //wsh_socket[i].SendStr('/*csh*/:' + #13 + #10 + '注销系统');
        sleep(1);
      end;
    form1.Wsocketsize.Close; //遥控结束才可关闭
    form1.Wsockethook.Close;
    form1.wsocket.close;
    priscreen.FreeImage; //清除流
    priscreen.Free;
 //   bmpstream.free; //释放内存流
  //  drawstream.free;
    close;
  end;

  if pingmu_state = '遥控辅导' then
    begin
    wsh_socket[s_selected].SendStr('/*csh*/:' + #13 + #10 + '遥控注销');
    form1.wsockethook.SendStr('down:=' + inttostr(key));
    sleep(1);
    end;
end;

procedure TjGuangbof.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  m_mouse: string;
  sbpos: TPoint;
begin

  if pingmu_state = '遥控辅导' then //单击鼠标
  begin
    getcursorpos(sbpos);

    m_mouse := 'state:=513' +
      '  x:=' + inttostr(sbpos.x) +
      ' y:=' + inttostr(sbpos.y);
    form1.wsockethook.SendStr(m_mouse);
  end;


end;

procedure TjGuangbof.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  m_mouse: string;
  sbpos: TPoint;
begin
  if pingmu_state = '遥控辅导' then //鼠标移动
  begin
    getcursorpos(sbpos);

    m_mouse := 'state:=512' +
      '  x:=' + inttostr(sbpos.x) +
      ' y:=' + inttostr(sbpos.y);
    form1.wsockethook.SendStr(m_mouse);
  end;


end;

procedure TjGuangbof.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  m_mouse: string;
  sbpos: TPoint;
begin
  if pingmu_state = '遥控辅导' then //双击鼠标
  begin
    getcursorpos(sbpos);
    m_mouse := 'state:=514' +
      '  x:=' + inttostr(sbpos.x) +
      ' y:=' + inttostr(sbpos.y);
    form1.wsockethook.SendStr(m_mouse);
  end;

end;

procedure TjGuangbof.FormShow(Sender: TObject);
begin
  pingmu_state := '';
  Image1.Canvas.CopyMode := cmSrcCopy;
  image1.Canvas.Draw(0, 0, priscreen);
 // dxtimer1.Enabled:=false;
end;

procedure TjGuangbof.PopupMenu1Popup(Sender: TObject);
var
  m_mouse: string;
  sbpos: TPoint;
begin
  if pingmu_state = '遥控辅导' then
  begin
    getcursorpos(sbpos);

    m_mouse := 'state:=516' +
      '  x:=' + inttostr(sbpos.x) +
      ' y:=' + inttostr(sbpos.y);
    form1.wsockethook.SendStr(m_mouse);
    m_mouse := 'state:=517' +
      '  x:=' + inttostr(sbpos.x) +
      ' y:=' + inttostr(sbpos.y);
    form1.wsockethook.SendStr(m_mouse);
  end;
end;

procedure TjGuangbof.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  wsh_move := true;
end;

procedure TjGuangbof.Label1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  sbpos: Tpoint;
begin
  if wsh_move = true then
  begin
    getcursorpos(sbpos);
    label1.Left := sbpos.x;
    label1.Top := sbpos.y;
  end;
end;

procedure TjGuangbof.Label1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  wsh_move := false;
end;

procedure TjGuangbof.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if pingmu_state = '遥控辅导' then
  begin
    if (key = $10) or (key = $11) or (key = $12) then
      form1.wsockethook.SendStr('up:=' + inttostr(key));
  end;
end;

procedure TjGuangbof.DxTimer1Timer(Sender: TObject);
var
  un_compress, wait_stream: TmemoryStream;

  //wsh_pain: Tbitmap;
  cshjpeg:tjpegimage;
  R: TRect;

begin

  if (hua_ok = true) and (draw_ok = true) then
  begin
    R := Rect(0, 0, Screen.Width, Screen.Height);
    hua_ok := false;
    draw_ok := false;
    un_compress := Tmemorystream.Create;
    un_compress.Clear;
    un_compress.Position := 0;
    drawstream.Position := 0;
 //转存
    wait_stream := Tmemorystream.Create;
    wait_stream.Clear;

    wait_stream.LoadFromStream(drawstream);
    wait_stream.Position := 0;

 //解压缩流
    with vclunzip1 do
    begin
      ArchiveStream := TMemoryStream.Create;
      archivestream.Position := 0;
      wait_stream.SaveToStream(archivestream);
      archivestream.Position := 0;
      try
        unZiptoStream(un_compress, 'screen.jpg');
      finally
        archivestream.Free;
        archivestream := nil;
      end;
    end;

    wait_stream.Clear;
    wait_stream.Free;

    drawstream.Clear;
   // wsh_pain := TBItmap.Create;
    cshjpeg:=tjpegimage.create;
    un_compress.Position := 0;
    cshjpeg.LoadFromStream (un_compress);
   // wsh_pain.Assign(cshjpeg);
      Image1.Canvas.CopyMode := cmSrcCopy;
      Image1.Canvas.Draw(0, 0, cshjpeg);

    //wsh_pain.FreeImage;
   // wsh_pain.Free;
    cshjpeg.Free ;
    un_compress.Clear;
    un_compress.Free;
    draw_ok := true;

  end;

end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -