📄 unitmain.pas
字号:
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, BFC, ComPort, Crc16, ComCtrls, ExtCtrls, StdCtrls, Buttons, jpeg,
ExtDlgs, Menus, DateUtils ,IniFiles;
type
TfrmMain = class(TForm)
PanelTop: TPanel;
PanelLeft: TPanel;
ScrollBox1: TScrollBox;
StatusBar1: TStatusBar;
btnCommOpen: TBitBtn;
CommList: TComboBox;
Bevel1: TBevel;
Label1: TLabel;
DispPic: TPanel;
BitBtn1: TBitBtn;
ImageA: TImage;
Panel1: TPanel;
Image1: TImage;
Panel2: TPanel;
Image2: TImage;
Panel3: TPanel;
Image3: TImage;
Panel4: TPanel;
Image4: TImage;
Panel6: TPanel;
Image6: TImage;
Panel5: TPanel;
Image5: TImage;
Panel7: TPanel;
Image7: TImage;
Panel8: TPanel;
Image8: TImage;
CheckBox1: TCheckBox;
BitBtn2: TBitBtn;
SavePictureDialog1: TSavePictureDialog;
RadioGroup1: TRadioGroup;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
SpeedButton4: TSpeedButton;
SpeedButton3: TSpeedButton;
ImageT: TImage;
Label4: TLabel;
Label3: TLabel;
Label5: TLabel;
Label2: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Panel9: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton7: TSpeedButton;
procedure btnCommOpenClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure BitBtn2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure ImageAMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SavePictureDialog1TypeChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ShowErr(Mess:String);
function CommOpen(CommNum:Integer):Boolean;
procedure GetDisp;
//procedure SetLang;
end;
const
COMSTAT = 0;
MESSINFO = 1;
var
frmMain: TfrmMain;
BufferAddress : DWord;
DisplayWidth, DisplayHeight : Word;
ClientID: Byte;
inifile: TIniFile;
Product, SW_Version,CurrentMode,CapTime, Scre,CopyErr,OpenErr,Conn:String;
DisConn,ConnErr,Tips,ConnSucc :string;
implementation
uses UnitAbout, UnitTools;
{$R *.dfm}
{$R WindowsXP.res}
procedure TfrmMain.ShowErr(Mess:String);
begin
MessageBox(handle,PChar(Mess),'系统提示',MB_ICONERROR);
end;
function TfrmMain.CommOpen(CommNum:Integer):Boolean;
var
Ver:string;
begin
Result := false;
iComNum := CommNum;
if not OpenCom(False) then
begin
ShowErr('COM'+IntToStr(CommNum)+OpenErr);
Exit;
end;
Sleep(300);
WriteComStr('AT^SQWE=1'^M); // BFC 模式
ReadBFC;
Ver := BFC_GetPhoneModel;
StatusBar1.Panels[COMSTAT].Text := 'COM'+IntToStr(CommNum)+
':'+Ver +ConnSucc;
if BFC_Funcs20($0A, [$07,$01], 2)<>ERR_NO then // 屏幕信息
begin
ShowErr(ConnErr);
Exit;
end;
DisplayWidth := ibfc.cd.DisplayInfo.Width;
DisplayHeight := ibfc.cd.DisplayInfo.Height;
ClientID := ibfc.cd.DisplayInfo.ClientID;
DispPic.Width := DisplayWidth+2;DispPic.Height:= DisplayHeight+2;
Panel1.Width := DisplayWidth+2;Panel1.Height:= DisplayHeight+2;
Panel2.Width := DisplayWidth+2;Panel2.Height:= DisplayHeight+2;
Panel3.Width := DisplayWidth+2;Panel3.Height:= DisplayHeight+2;
Panel4.Width := DisplayWidth+2;Panel4.Height:= DisplayHeight+2;
Panel5.Width := DisplayWidth+2;Panel5.Height:= DisplayHeight+2;
Panel5.Top := Panel1.Top+Panel1.Height+7;
Panel6.Width := DisplayWidth+2;Panel6.Height:= DisplayHeight+2;
Panel6.Top := Panel1.Top+Panel1.Height+7;
Panel7.Width := DisplayWidth+2;Panel7.Height:= DisplayHeight+2;
Panel7.Top := Panel1.Top+Panel1.Height+7;
Panel8.Width := DisplayWidth+2;Panel8.Height:= DisplayHeight+2;
Panel8.Top := Panel1.Top+Panel1.Height+7;
Label1.Caption := Scre+IntToStr(DisplayHeight)+
'*'+IntToStr(DisplayWidth);
BitBtn1.Top := DispPic.Top + DisplayHeight + 6;
SpeedButton6.Top := DispPic.Top + DisplayHeight + 6;
Label8.Caption := Product+Ver;
//Label6.Caption := 'IMEI: '+BFC_GetIMEI;
Label7.Caption := SW_Version+'V'+BFC_GetSoftWareVer;
Label9.Caption := CurrentMode+BFC_GetSecurityMode;
if BFC_Funcs20($0A, [$09,ClientID], 2)<>ERR_NO then
begin
ShowErr('获取手机缓冲区地址失败!');
Exit;
end;
BufferAddress := ibfc.cd.DisplayUpdateInfo.BufferAddress;
Result := true;
end;
procedure TfrmMain.btnCommOpenClick(Sender: TObject);
var
COMID:string;
begin
if btnCommOpen.Tag = 0{'连接'} then
begin
COMID := CommList.Text;
Delete(COMID,1,3);
if not CommOpen(StrToInt(COMID)) then
begin
//ShowErr('COM'+IntToStr(CommList.ItemIndex+1)+' 打开失败!');
Exit;
end;
btnCommOpen.Caption := DisConn;//'断开';
btnCommOpen.Tag := 1;
BitBtn1.Enabled := true;
SpeedButton5.Enabled := true;
SpeedButton2.Enabled := false;
Inifile.WriteString('COMM', 'Port',CommList.Text);
//StatusBar1.Panels[COMSTAT].Text := 'COM'+IntToStr(CommList.ItemIndex+1)+' 打开成功!'
end
else
begin
BFC_SendAT('AT^SQWE=0'^M);
CloseCom;
btnCommOpen.Caption := Conn;
btnCommOpen.Tag := 0;
Label1.Caption := Scre;//'屏幕:';
BitBtn1.Enabled := false;
SpeedButton5.Enabled := false;
SpeedButton2.Enabled := true;
StatusBar1.Panels[COMSTAT].Text := 'COM '+DisConn;
end;
end;
procedure TfrmMain.FormShow(Sender: TObject);
var
I,OldCOM: Integer;
CommName: String;
begin
OldCOM := -1;
Inifile := TInifile.Create(ExtractFilePath(Application.ExeName)+'X65.ini');
CommName := Inifile.ReadString('COMM', 'Port', '');
SpeedButton7.Caption := Inifile.ReadString('LANGUAGE','LANGUAGE', 'English');
if SpeedButton7.Caption = 'Chinese' then
begin
SpeedButton7.Tag := 0;
SpeedButton7Click(Sender);
end
else
begin
SpeedButton7.Tag := 1;
SpeedButton7Click(Sender);
end;
// 取得串口列表
CommList.Items.Clear;
for I := 1 to 15 do // Iterate
begin
iComNum := I;
if OpenCom(False) then
begin
CommList.Items.Add(Format('COM%d',[I]));
if CommName=Format('COM%d',[I]) then OldCOM := CommList.Items.Count-1;
CloseCom;
end;
end; // for
if OldCOM=-1 then
CommList.ItemIndex := CommList.Items.Count-1
else
CommList.ItemIndex := OldCOM;
Label8.Caption := '';
Label6.Caption := '';
Label7.Caption := '';
Label9.Caption := '';
end;
procedure TfrmMain.GetDisp;
var
I, J, H : Integer;
Addr: DWord;
b:array of byte;
w:array of word absolute b;
Bitmap: TBitmap;
Row : pWordArray;// from SysUtils
begin
SetLength(b,DisplayWidth*2);
SetLength(w,DisplayWidth);
Bitmap := TBitmap.Create;
Bitmap.PixelFormat := pf16bit;
Bitmap.Width := DisplayWidth;
Bitmap.Height := DisplayHeight;
BitBtn1.Enabled := false;
CheckBox1.Enabled := false;
//StatusBar1.Panels[MESSINFO].Text := '正在截取屏幕内容,请稍等...';
H := -2;
try
for I := 0 to DisplayHeight - 1 do // Iterate
begin
if CheckBox1.Checked then
H := H+2
else H := I;
if H< (DisplayHeight - 1) then
Addr := BufferAddress+H*DisplayWidth*2
else begin
H := -1;
continue;
end;
//Addr := BufferAddress+I*DisplayWidth*2;
if not BFCReadMem(Addr,DisplayWidth*2,b) then
begin
ShowErr(CopyErr);
Break;
end;
Row := Bitmap.Scanline[H];
for J := 0 to DisplayWidth - 1 do // Iterate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -