Sporing Vindu Tall i MDI Editors

Window-håndtering er viktig i en kompleks MDI "redaktør". Du trenger en stabil og oppdatert vindu nummerlisten. Standard pick-listen på Vindu-menyen er ustabil hvis du har mer enn ti filer åpne. Det er fornuftig å bygge ditt eget system for sporing
Sporings Vindu Tall i MDI Redaktører
Ved Gene [email protected]
Advarsel:.
Test-bed for denne koden er Borland sin TextEdit demo som kommer med Delphi. Hvis du kompilere i Delphi 5 eller 5.01, må du ha de modifiserte forms.pas som jeg henvise deg til i min tidligere artikkel, Programming System /Next (Forrige) i MDI redaktører.
I beskrivelsen ovenfor, sier jeg at vindusmenyen pick-listen er ustabil når mer enn ti vinduer er åpne. Jeg henviser til det faktum at enhver fil utover den niende, når plukket, blir den niende. En bruker er ikke til å jevnlig har ti eller flere vinduer åpne og er ikke sannsynlig å betale mye oppmerksomhet til tallene på listen, uansett. Men Microsofts oppfatningen av brukere mentale evner er ikke gratis. Tallene på den listen ser ut til å være bare en gjenstand av en nummerert liste. Og bare ni er nummerert, den niende man "endre" som dialogen kommer opp og andre er plukket. Når et vindu er oppe er det ingenting å identifisere sin posisjon i hvilken som helst rekkefølge, enn si den last rekkefølge. System /Next (og Prev) knipser gjennom z-stack (rekkefølge) som endres fra øyeblikk til øyeblikk.
I eWriter, min MDI tekstforfatter
(programvaren kommer av den gamle maskinvaren skrivemaskin
), satte jeg et vindu nummer (tildelt ved lasting og oppdateres når en fil med et lavere antall er stengt) på statuslinjen, sammen med filens byte størrelse. Ved å klikke på statuslinjen vil få "neste" fil i last rekkefølge (neste høyere vindu nummer). For hopping, jeg bruker den gamle Turbo Alt + TopNum # for vindu # 1 .. # 9. Alt + TopNum # 0 får en dialog jeg har på Vindu-menyen (over standard plukkliste). Denne dialogen gir fullstendige banenavn og er en plukkliste. Hvis brukeren ikke er sikker på som
Alt + # han eller hun ønsker, Alt + 0 og et klikk på stien og en annen på Go-knappen ikke bremse hoppe mye.
Koden under redskaper (i TextEdit) et enkelt system for sporing som holder styr på vindus tall og vedleggene. Jeg har satt på en enkel seer slik at du kan "sjekke" vindus tallene etter din åpnes, lukkes, og stokking. Jeg vet ikke hvorfor z-stack bestilling ville være nyttig, men du kan se at den enkleste måten å sjekke filen /nummer forbindelse også reflekterer z-order i betrakteren Merk:.
I oppsettet for Tile Top 2 av N Windows
i min Selektiv teglstein i MDI Redaktører, etter jeg ikke sette på noen håndtering for "Untitled" filer enten før eller etter Saving som setter i et banenavn. I SavingAs1Click, det gjorde jeg ikke legge til den nye filen til OpenFiles. Og jeg steds gjorde noe om en "Untitled" som ikke har noen bane. Hvis "Untitled" er en av de to øverste, fører det ikke noe problem. I koden nedenfor, inkluderer jeg en SaveAs1Click som kan inkluderes i teglstein artikkelen kode. Hvis du lagrer den nye filen den er plassert i OpenFiles og er inkludert i all behandling. Hvis du har en ulagret "Untitled" File, men vil du ha merkelige effekter (som du gjør nå, om filen er lagret eller ikke). Tile Top 2 av N vinduer
vil ignorere det. Det vil dukke opp i flislegging. Tapet av gjenopprettings dimensjonering er ikke en av de merkelige effekter. Som er forårsaket av Tile1Click
som jeg kaller i Tile Top 2 av N vinduer
Kode:.
Ved å bruke TextEdit som en test-bed for MDI Text Editor utvikling jeg gjør i disse artiklene, noen egenskaper
må innstilles. Disse er:
TOpenDialog Options /ofAllowMultiSelect: TrueTEditForm WindowState: wsmaximized
I MDIFrame.pas, erklære en global (Interface seksjon) variabel kalt EditTag som brukes i de modifiserte versjoner av New1Click og Open1Click. OpenFiles, brukes senere, er også vedtatt og er initialisert
TFrameForm ... Var ... EditTag: longInt;. OpenFiles: TstringList;
initialisering ... OpenFiles: = TStringList.Create; OpenFiles.Text: = ''; Bedrifter Den Open1Click og New1Click rutiner gir en verdi for EditTag før hver åpning. Verdien vil bli satt i EditForm tag variabel (I sin FormCreate rutine). Dette vil sørge for at hver redaktør vil ha et vindu nummer
prosedyre TFrameForm.New1Click (Sender: TObject.); begynne LockWindowUpdate (Handle); EditTag: = MDIChildCount + 1; TEditForm.Create (Selv); LockWindowUpdate (0); end;
prosedyre TFrameForm.Open1Click (Sender: TObject); Var jeg: integer;
begynne hvis OpenFileDialog.Execute deretter LockWindowUpdate (Handle); For i: = 0 til OpenFileDialog.Files.count - en gjør begynne EditTag: = MDIChildCount 1; med TEditForm.Create (Selv) gjøre Open (OpenFileDialog.Files [i]) end; LockWindowUpdate (0); end;
I TeditForm (MDIEdit.pas), er all sporings tatt vare på. I FormCreate, kopiere EditTag inn Tag:
prosedyre TEditForm.FormCreate (Sender: TObject); begynne Banenavn: = DefaultFileName; Tag: = EditTag; end;
EditTag er (lastsekvens) Vindu nummer. Dette vil bli holdt i EditForm Tag variabel. Disse lagrede numre vil bli "flyttet ned" når en redaktør med et lavere antall er stengt. Nå bygger vi i vår virkelige sporings motoren med TEditForm.Close. Denne rutinen bruker OpenFiles stringlist jeg erklærte i MDIFrame.pas
prosedyre TEditForm.FormClose (Sender: TObject; Var Handling: TCloseAction.); Var i, j: LongInt; CloseTag: integer;
begynne CloseTag: = Tag; for j: = 0 til (FrameForm.MDIChildCount - 1) gjør med FrameForm.MDIChildren [j] som TEditForm gjør begynne hvis Tag > CloseTag deretter Tag: = Tag - 1; ende; for i: = 0 til OpenFiles.Count - en gjøre hvis OpenFiles [i] = Sti deretter begynne OpenFiles.Delete (i); gå i stykker; ende; Handling: = caFree; end;
prosedyre TEditForm.Saveas1Click (Sender: TObject); begynne SaveFileDialog.FileName: = Banenavn; hvis SaveFileDialog.Execute deretter begynne Banenavn: = SaveFileDialog.FileName; Caption: = ExtractFileName (Banenavn); OpenFiles.Insert (Tag, Sti); //Liste ny Sti Save1Click (Sender); ende; end;
Se resultat:
Merk:
viewer menypunktet angitt nedenfor ser ut til å føre til at standardplukkliste å droppe ut, i hvert fall i Delphi 5. Jeg har fiklet med velgere i og ut. Du ønsker kanskje å fikle med den og se om du kan få TextEdit er pick-liste for stokking z-stack før visning spores vinduer. Du må kanskje Gjenopprett vinduer til liten størrelse å stokke z-ordre ved å trekke vinduene opp. Dette er trolig bare i D5 (ikke D2-D4) som håndterer meny-bygning på en måte jeg havn't helt fikk taket på. Jeg absolutt gjenoppbygge Vindu-menyen ovenfor standard pick-listen i eWriter først skrevet i Delpi 3 og migrerte gjennom Delphi 4 til 5.
Vi ønsker en "viewer" for å se resultatene av vår tildeling og sporing av Window tall som vi åpne, lukke og shuffle (z-stack) vinduer. På bunnen av vinduet menyelementer-liste, legge til et nytt menypunkt:
Bildetekst: Window nummertilordning List
Navn: WinNumList1
Tab til Arrangementer Hotell og dobbeltklikk onclick
. Deretter fyller du ut hendelsesbehandling for å skape denne rutinen:
prosedyre TFrameForm.WinNumList1Click (Sender: TObject); Var i, j: integer; List: tstringList; S: string;
begynne //Denne rutinen er litt convoluted å fange "New Files" List: = TSTringList.Create; List.Add ('Ytterst Vindu på toppen, Z-stack for' # 13); For i: = 0 til (MDIChildCount - 1) trenger Begynn S: = 'Window Number' + IntToStr (MDIChildren [i] .Tag); hvis MDIChildren [i] .Caption = DefaultFileName deretter begynne S: = S + '' + MDIChildren [i] .Caption; List.Add (S); ende annet begynne for j: = 0 til (OpenFiles.Count - 1) gjøre hvis pos (MDIChildren [i] .Caption, OpenFiles.strings [j]) < > 0 da begynne S: = S + '' + OpenFiles.Strings [j]; List.Add (S); bryte slutten; ende; ende; messageDlg (List.Text, mtInformation, [mbOK], 0); List.Free slutten;
Her er en titt på resultatet:
Merk:
å se bruken av dette vinduet nummer sporing i komplekset billedvev av reelle vindu-håndtering, du kan spille med min eWriter tekstforfatter. Det er ikke bare freeware, men ikke installere seg i stoff av et system. Det er lett å spille med. Hver åpen redaktør har sin Window Antall på statuslinjen. Ved å klikke på statuslinjen blir det neste høyere vinduet nummer editor. Alt + TopNum # (1..9) får vinduet nummerert 1..9. Alt + TopNum0 får en fullstendig bane pic liste om standard bildetekst-bare plukke listen er på Vindu-menyen for litt raskere å plukke. (Den fullstendige banen plukkliste er over den på menyen.) 0.C, som ventes i juni 2001 vil ha vindus tall i banenavnet plukkliste som et resultat av min skrive denne artikkelen. Interlaced Bibliografi Anmeldelser Jeg begynte 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. Eske merknader vises de fleste steder. Finne det er pågående "butikk" samtale ...


    Programming System /Next (Forrige) i MDI redaktører
    http://www.HowToDoThings.com/showarticle.asp?article=143


    Selektiv teglstein i MDI Redaktører
    http://www.HowToDoThings.com/showarticle.asp?article=147

    Sporings Vindu Tall i MDI Redaktører
    http://www.HowToDoThings.com/showarticle.asp?article=154

    Avsnitt "helle" fra en teksteditor
    http://www.HowToDoThings.com/showarticle.asp ? article = 178