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

📄 dbg8051.pas

📁 Borland Pascal写的8051单片机模拟仿真器。内有源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                                  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 + -