📄 dbg8051.pas
字号:
if b=0 then
o:=NoweOknoMDI(a+us_OknoIns,true,true,R.left,
R.top,R.right-R.left,R.bottom-R.top)
else
o:=NoweOknoMDI(a+us_OknoIns,false,true,R.left,R.top,
R.right-R.left,R.bottom-R.top);
wtrakciezmian:=false;
DestroyWindow(GetWindow(o,gw_Child)); {usu?now?zawarto滄}
SetParent(GetWindow(Okno,gw_Child),o); {渞odek prze丑縸
SendMessage(o,wm_NCActivate,1,0); {uaktywnij nowe okno}
UpdateWindow(o); {odrysuj zawarto滄}
SetWindowWord(o,2,1-b); {zmie?informacj?o aktywno渃i}
if (a=0) and (b=0) then OknoInstr:=o;
PostMessage(Okno,wm_Close,0,0); {i zamknij stare okienko}
end;
else PostMessage(GetWindow(Okno,gw_Child),wm_Command,wParam,LParam);
end;
wm_Create: begin
s:=pointer(PCreateStruct(LParam)^.lpCreateParams);
a:=s^.LParam;
SetWindowWord(Okno,0,a);
GetClassName(Okno,clname,10);
if clname[8]='0' then SetWindowWord(Okno,2,0) else SetWindowWord(Okno,2,1);
SetWindowLong(Okno,GWL_STYLE,GetWindowLong(Okno,GWL_STYLE) xor ws_MaximizeBox);
if not (a IN [3,4,5,11]) then {mo縩a zmienia?wielko渃i niekt髍ych okienek}
SetWindowLong(Okno,GWL_STYLE,GetWindowLong(Okno,GWL_STYLE) xor ws_ThickFrame);
GetClientRect(Okno,R2);
GetWindowRect(Okno,R);
MapWindowPoints(HWND_DESKTOP,Klient,R,2);
case a of
0: begin
o:=CreateWindow('KLASAINSTR','',ws_Child or ws_Visible,
0,0,458,320,Okno,0,hInstance,nil);
R.right:=R.left+458;
R.bottom:=R.top+320+GetSystemMetrics(SM_CYCAPTION);
end;
1: begin
o:=CreateWindow('KLASAREGS','',ws_Child or ws_Visible,
0,0,192,226,Okno,0,hInstance,nil);
R.right:=R.left+192;
R.bottom:=R.top+226+GetSystemMetrics(SM_CYCAPTION);
end;
2: begin
o:=CreateWindow('KLASABIT','',ws_Child or ws_Visible,
2,1,FontOEMszer*24+16,5*FontOEMwys+19,Okno,0,hInstance,nil);
R.right:=R.left+FontOEMszer*24+20;
R.bottom:=R.top+5*FontOEMwys+20+GetSystemMetrics(SM_CYCAPTION);
end;
3..5: o:=CreateWindow('KLASAHEX','',ws_Child or ws_Visible,
-1,-1,324,112,Okno,0,hInstance,Ptr(0,a-3));
6: begin
o:=CreateWindow('KLASASYMB','',ws_Child or ws_Visible,
0,0,366,226,Okno,0,hInstance,nil);
R.right:=R.left+366;
R.bottom:=R.top+225+GetSystemMetrics(SM_CYCAPTION);
end;
7: begin
o:=CreateWindow('KLASASTAN','',ws_Child or ws_Visible,
0,0,40+FontOEMszer*23,Max(32,FontOEMwys+2),Okno,0,hInstance,nil);
R.right:=R.left+40+FontOEMszer*23;
R.bottom:=R.top+Max(34,FontOEMwys+4)+GetSystemMetrics(SM_CYCAPTION);
end;
8: begin
o:=CreateWindow('KLASABREAK','',ws_Child or ws_Visible,
0,0,366,226,Okno,0,hInstance,nil);
R.right:=R.left+366;
R.bottom:=R.top+225+GetSystemMetrics(SM_CYCAPTION);
end;
9: begin
o:=CreateWindow('KLASAPORTY','',ws_Child or ws_Visible,
0,0,155,124,Okno,0,hInstance,nil);
R.right:=R.left+155;
R.bottom:=R.top+124+GetSystemMetrics(SM_CYCAPTION);
end;
10: begin
o:=CreateWindow('KLASACALC','',ws_Child or ws_Visible,
0,0,DialogSzer(74),DialogWys(40),Okno,0,hInstance,nil);
R.right:=R.left+DialogSzer(74);
R.bottom:=R.top+DialogWys(40)+GetSystemMetrics(SM_CYCAPTION);
end;
11: o:=CreateWindow('KLASATERMINAL','',ws_Child or ws_Visible,
0,0,R2.right-R2.left,R2.bottom-R2.top,Okno,0,hInstance,nil);
else FunDbgMDICl:=-1;
end;
if a<=11 then
begin
MoveWindow(Okno,R.left,R.top,R.right-R.left,R.bottom-R.top,true);
PostMessage(o,wm_Command,us_OdnowWidok,0);
end;
end;
else FunDbgMDICl:=DefMDIChildProc(Okno,Kod_meldunku,wParam,LParam);
end;
end;
function FunRamki(Okno:HWnd;Kod_meldunku,wParam:word;LParam:longint):longint; EXPORT;
const ParKlienta:TClientCreateStruct=(hWindowMenu:0; idFirstChild:1000);
var ProcDial:TFarProc;
begin
FunRamki:=0;
if Kod_meldunku=wm_Activate then FunRamki:=OdrysujAktyw(Okno,Kod_meldunku,WParam,LParam);
case Kod_meldunku of
wm_Create : begin
Klient:=CreateWindow('MDIClient',nil,ws_Child or ws_ClipChildren or
ws_Visible,0,0,0,0,Okno,1,hInstance,@ParKlienta);
Inicjuj(Okno,0);
PostMessage(Okno,wm_Command,us_WczytRozm,0);
end;
wm_NCPaint, wm_Paint : Odrysuj(Okno,Kod_meldunku,WParam,LParam);
wm_Destroy: begin
NoToKoniec(Okno);
PostQuitMessage(0);
end;
wm_Command: case wParam of
us_Reset: ResetProc(Okno);
us_Nowy: Inicjuj(Okno,1);
us_Koniec: DestroyWindow(Okno);
us_PlikNr1..us_PlikNr1+7: WczytajAutomat(Okno,wParam-us_PlikNr1+1);
us_EWczytaj: WczytajEPROM(Okno);
us_EZapisz: ZapiszEPROM(Okno);
us_EWczytajHex: WczytajEPROMhex(Okno);
us_EZapiszHex: ZapiszEPROMhex(Okno);
us_EZapiszBajty: ZapiszBajty(Okno,selROM,$FFFF);
us_EZapiszDeasm: ZapiszEPROMDeasm(Okno);
us_RWczytaj: WczytajRAM(Okno);
us_RZapisz: ZapiszRAM(Okno);
us_RWczytajHex: WczytajRAMhex(Okno);
us_RZapiszHex: ZapiszRAMhex(Okno);
us_RZapiszBajty: ZapiszBajty(Okno,selRAM,$FFFF);
us_IWczytaj: WczytajRAMInt(Okno);
us_IZapisz: ZapiszRAMInt(Okno);
us_IWczytajHex: WczytajRAMInthex(Okno);
us_IZapiszHex: ZapiszRAMInthex(Okno);
us_IZapiszBajty: ZapiszBajty(Okno,selRAMInt,$FF);
us_PulaFlip: ZmienStanPulapki;
us_SymbWczytaj: SymbWczytaj(Okno);
us_SymbZapisz: SymbZapisz(Okno);
us_PulaWczytaj: WczytajPula(Okno);
us_PulaZapisz: ZapiszPula(Okno);
us_WykS: if runprog>0 then MessageBeep(mb_IconHand) else
begin
SetMenu(Okno,MenuStop);
runprog:=1;
end;
us_WykTu: WykTutaj(Okno);
us_PodajAdres1: WykTutaj1(Okno,LoWord(LParam));
us_WykAdr: WykAdres(Okno);
us_WykRET: if runprog>0 then MessageBeep(mb_IconHand) else
begin
SetMenu(Okno,MenuStop);
runprog:=3;
end;
us_WykI: if runprog>0 then MessageBeep(mb_IconHand) else
begin
Wykonaj;
if OknoInstr<>0 then SendMessage(GetWindow(OknoInstr,gw_Child),
wm_Command,us_OdnowCoTrzeba,0);
OdrysujWszystkie;
AktualizujWtyczki(OknoGlowne);
end;
us_WykK: WykKrok(Okno);
us_WykAnim: WykAnim(Okno,2);
us_WykAktual: WykAktual(Okno,2);
us_PrzerwZ0..us_PrzerwRI: GenPrzerwanie(wParam-us_PrzerwZ0,false);
us_JezPL: ZmienJezyk(Okno,true);
us_JezEN: ZmienJezyk(Okno,false);
us_ZapRozm: ZapiszRozm(Okno);
us_WczytRozm: WczytajRozm(Okno);
us_WyczyscListe: WyczyscListePlikow;
us_WielkCzcionki: ZmienWielkoscCzcionki(Okno);
us_RAMInt128: WykBigMem(Okno,0);
us_RAMInt256: WykBigMem(Okno,1);
us_Wtyczki .. us_Wtyczki+31: WybranaWtyczka(Okno,wParam);
us_OknoIns .. us_OknoTerminal: NoweOknoMDI(wParam,true,false,0,0,0,0);
us_OknoRozmiesc: SendMessage(Klient,wm_MDICascade,0,0);
us_OknoOdrysuj: OdrysujWszystkie;
us_OknoNastepne: SendMessage(Klient,wm_MDINext,
SendMessage(Klient,wm_MDIGetActive,0,0),0);
us_OknoZamknij: begin
SendMessage(Klient,wm_MDIDestroy,
SendMessage(Klient,wm_MDIGetActive,0,0),0);
ListaOkien;
end;
us_OknoNr0 .. us_OknoNr0+29: ZmienAktywnego(wParam);
us_About: begin
MessageBeep(mb_IconExclamation);
PokazDialog('ABOUT',@FunDialogu);
end;
us_StopNow: if runprog>0 then
begin
runprog:=0;
PrzywrocMenu(Okno);
OdrysujWszystkie;
AktualizujWtyczki(Okno);
SkoczDoPC;
end;
us_ListaOkien: ListaOkien;
us_SkoczDoPC: SkoczDoPC;
end;
else FunRamki:=DefFrameProc(Okno,Klient,Kod_meldunku,wParam,LParam);
end;
end;
const NaszaKlasa: TWndClass = (
style : 0;
lpfnWndProc : @FunRamki;
cbClsExtra : 0;
cbWndExtra : 0;
hInstance : 0;
hIcon : 0;
hCursor : 0;
hbrBackground : COLOR_APPWORKSPACE+1;
lpszMenuName : nil;
lpszClassName : 'DBG8051');
begin
if HPrevInst<>0 then
begin
MessageBeep(mb_IconExclamation);
BWCCMessageBox(0,'Program ju?pracuje!'#13#10#13#10'Program is working already!',
'Debugger 8051',mb_IconStop);
Halt;
end;
NaszaKlasa.hInstance:=hInstance;
NaszaKlasa.hIcon:=LoadIcon(hInstance,'IKONA');
if not RegisterClass(NaszaKlasa) then Halt;
NaszaKlasa.lpszClassName:='DBGMDICL1';
NaszaKlasa.cbWndExtra:=4;
NaszaKlasa.lpfnWndProc:=@FunDbgMDICl;
NaszaKlasa.hIcon:=LoadIcon(hInstance,'OKNO1');
NaszaKlasa.hbrBackground:=GetStockObject(LTGRAY_BRUSH);
if not RegisterClass(NaszaKlasa) then Halt;
NaszaKlasa.lpszClassName:='DBGMDICL0';
NaszaKlasa.hIcon:=LoadIcon(hInstance,'OKNO0');
if not RegisterClass(NaszaKlasa) then Halt;
GetCurDir(starydir,0);
FileSplit(StrPCopy(param0,ParamStr(0)),progdir,nil,nil);
SetCurDir(progdir);
MenuGlownePL:=LoadMenu(hInstance,'MENU');
MenuGlowneEN:=LoadMenu(hInstance,'EMENU');
MenuStop:=LoadMenu(hInstance,'STOPMENU');
SetMessageQueue(64);
OknoGlowne:=CreateWindow('DBG8051','''51',ws_OverlappedWindow,
cw_UseDefault,cw_UseDefault,cw_UseDefault,cw_UseDefault,0,MenuGlownePL,hInstance,nil);
ShowWindow(OknoGlowne,sw_ShowMaximized);
TabAkcel:=LoadAccelerators(hInstance,'AKCELERATORY');
repeat
if runprog>0 then
begin
RuszajSie;
if PeekMessage(Meldunek,0,0,0,pm_Remove) then
if Meldunek.message<>wm_Quit then
if (TranslateMDISysAccel(OknoGlowne,Meldunek)=false) and
(TranslateAccelerator(OknoGlowne,TabAkcel,Meldunek)=0) then
begin
TranslateMessage(Meldunek);
DispatchMessage(Meldunek);
end;
end
else
begin
if GetMessage(Meldunek,0,0,0) then
if (TranslateMDISysAccel(OknoGlowne,Meldunek)=false) and
(TranslateAccelerator(OknoGlowne,TabAkcel,Meldunek)=0) then
begin
TranslateMessage(Meldunek);
DispatchMessage(Meldunek);
end;
end;
until Meldunek.message=wm_Quit;
DestroyMenu(MenuGlownePL);
DestroyMenu(MenuGlowneEN);
DestroyMenu(MenuStop);
SetCurDir(starydir);
Halt(Meldunek.wParam);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -