Programmering System /Next (Forrige) i MDI editors

"How to" program systemmenyen i MDI barnet windowsof en MDI teksteditor eller tekstforfatter å endre Neste og Prevfrom z-stack som kjører til nyttige skriving /redigering oppgaver Programming System /Neste (Forrige) i MDI redaktører
By Gene [email protected]~~number=plural utvidet Notatbøker er en vanlig praksis og de nye Notepadis nesten alltid en MDI søknad. TextEdit er en "sample" eller "demo" som har vært i hver Delphi pakke. Jeg skrev dette for myown utvidet Notepad som startet i TextEdit tilbake i 1997, Soi ikke engang å endre enhetsnavnene for deg å sette codeinto TextEdit kilde, kompilere og kjøre tests.The MDI barns System menyen Neste har vært uendret siden timeimmemorial. Det er en programmerer "prøvekjøring" av z-stabel med Openwindows (redaktører, i vårt tilfelle). Åpne et antall filer eller editors.Keep treffer System /Neste eller Ctrl + F6 og du holde å sette den topcard nederst i bunken. Bruk (skjult) System /Prev byhitting Shift + Ctrl + F6 og gjøre en omvendt løp ved å bringe bottomcard til toppen. Nyttig i alpha testing. Det er ikke nyttig i aneditor. Etter å ha hoppet blant vinduer for en tid, z-stack nolonger gjenspeiler belastningen (eller vindu nummer) orden og du havea slags tilfeldig vindu access.What ville være nyttig for en forfatter eller redaktør ville være å keepswapping de to øverste vinduene og, etter å ha hoppet til en annen windowor åpne en ny en, for å gå tilbake til de to og gå på swapping.The koden under implementerer dette. System /Neste eller Ctrl + F6 vil dothe bytte ved å bringe den neste til toppen til toppen. De lasttwo stillingene blir husket etter hver bruk av Neste og ifpositions forskyves, Shift + Ctrl + F6 vil gjenopprette de to totheir posisjoner etter den siste System /Neste eller Ctrl + F6. Dette willwork i hvilken som helst 32-bit Delphi.If du kompilere TextEdit i Delphi 5.0 eller (etter applyingthe Update Pack) 5.01, vil du ha en ustabil TextEdit til putthis inn. Enhver MDI program som TextEdit hjelp fusjonerte menyer Breakblir og låse opp når du bytter maxed vinduer. I Delphi 1through 4 forekom et mindre alvorlig resultat. Den [x] -knappen ofthe nye topp redaktør ville være nedtonet, men funksjonell. Dette wasbecause ingen "Restore ... Maksimer" klammen bryteren. Disse weretacked på som en ettertanke for å tvinge på menyen til en useablestate. På 5,0, ble de "tvinge koden" fjernet. Men ingen bracketingwas inn. Derfor er den totale ulykken. Løsninger for D4 problemappeared i Bug liste Delphi (ikke Borland-tallet). En av thosesolutions vil løse problemet D5. Denne URL vil ta deg toitem 0372 i Delphi Bug listen: http: //www.jrsoftware.org/buglist/generated/entry0372.htmCopy Greg Chapman prosedyre (TCustomForm.MergeMenu) inn afile og lagre det. Lag en kopi av forms.pas og erstatte thatprocedure i forms.pas med Chapmans. Sett den endrede forms.pasinto TextEdit prosjektkatalogen og gjøre en opphopning av TextEdit.I've lese at medfølgende VCL kilden ikke alltid samsvarer theDCU, men dette synes ikke å forårsake noen problemer her. Likevel, det isa god idé å begrense den endrede enheten til individuelle MDI projectdirectories og ikke bruke det som regel som en ny forms.pas på yourlibrary path.The koden under er et budskap handler å plassere i MDIEdit.pasand to responsrutiner for å plassere i MDIFrame .pas. Den declarationsare også here.Code: {Denne meldingen handler er i MDIEdit.pas enhet av Borland demo TextEdit brukt som en test-bed for dette prosjektet.} Skriver TEditForm = klasse (TForm) ... privat ... prosedyre WMSysCommand (var Msg: TWMSysCommand); Meldingen WM_SYSCOMMAND; ... Prosedyre TEditForm.WMSysCommand (var Msg: TWMSysCommand); begynne sak Msg.CmdType av SC_NextWindow: begynne FrameForm.GetNext; slutt; SC_PREVWINDOW: begynne FrameForm.GetPrev; ende annet arvet; end, end, {. Disse to rutiner er i MDIFrame.pas enhet av Borland demo TextEdit brukt som en test-bed for dette prosjektet} skriver TFrameForm = klasse (TForm) ... prosedyre GetNext; prosedyre GetPrev; ... Var ... IsMaxed: boolean; F6One: string; F6Two: string; implementationprocedure TFrameForm.GetNext, begynne hvis MDIChildCount < 2 da begynne messageBeep (0); Gå; slutt; LockWindowUpdate (Handle); F6One: = ActiveMDIChild.Caption; hvis ActiveMDIChild.WindowState = wsMaximized deretter begynne IsMaxed: = true; ActiveMDIChild.WindowState: = wsNormal; slutt; MDIChildren [1] .BringToFront; hvis IsMaxed deretter begynne IsMaxed: = False; ActiveMDIChild.WindowState: = wsMaximized; slutt; F6Two: = ActiveMDIChild.Caption; LockWindowUpdate (0); end; prosedyre TFrameForm.GetPrev, Var jeg: integer; begynne hvis MDIChildCount < 2 da begynne messageBeep (0); Gå; slutt; LockWindowUpdate (Handle); hvis ActiveMDIChild.WindowState = wsMaximized deretter begynne IsMaxed: = true; ActiveMDIChild.WindowState: = wsNormal; slutt; for i: = 0 til MDIChildCount - en gjøre hvis MDIChildren [i] .Caption = F6One så MDIChildren [i] .BringToFront; for i: = 0 til MDIChildCount - en gjøre hvis MDIChildren [i] .Caption = F6Two så MDIChildren [i] .BringToFront; hvis IsMaxed deretter begynne IsMaxed: = False; ActiveMDIChild.WindowState: = wsMaximized; slutt; LockWindowUpdate (0); end;
Interlaced Bibliografi
begynte jeg ad-libbing disse artiklene på å gjøre noen av de tingene jeg gjør i eWriter i Delphi demo TextEdit (som jeg bygget eWriter). Det er naturlig å samle alle disse i ett eksemplar av TextEdit. Og du kan ha til å gå frem og tilbake for å fylle på ny, savnet, eller endret supportrutiner. Boxed merknader vises de fleste steder. Figur det pågående "butikk" samtale ...


    Programming System /Next (Forrige) i MDI editorshttp: //www.HowToDoThings.com/showarticle.asp article = 143


    Selektiv teglstein i MDI Editorshttp: //www.HowToDoThings.com/showarticle.asp article = 147

    Sporings Vindu tall i MDI Editorshttp: //www.HowToDoThings.com/showarticle.asp article = 154

    Avsnitt "helle" fra en tekst editorhttp: //www.HowToDoThings.com/showarticle Asp? article = 178