Avatar billede hugopedersen Nybegynder
09. oktober 2009 - 07:21 Der er 9 kommentarer og
2 løsninger

Åbne form der var åbne ved afslutning

Jeg har en applikation hvor den eneste autogenererede form er af type fsMDIForm.
Der er en del andre forms som jeg selv styrer hvornår de creates. På disse har jeg en funktion der gemmer i registry hvor de er på skærmen, hvor store de er og hvilken state de er.
Nu vil jeg så gerne prøve at opfylde et brugerønske om at de forms der er åbne når programmet lukkes ned åbnes igen når programmet starter næste gang.

Men der har brugeren nok sat mig på en lidt større opgave. Jeg kan i hvert fald ikke lige få hul på den.
Avatar billede a_nor Nybegynder
09. oktober 2009 - 07:42 #1
Når du lukker main-formen kan du anvende screen-objektet:


for i:= screen.FormCount-1 downto 0 do
    SaveInfo(i)
Avatar billede hugopedersen Nybegynder
19. oktober 2009 - 08:23 #2
Da alle mine forms ikke er genereret fra start kan jeg ikke lige finde en metode til at loope dem, så jeg har betemt mig for at sige til brugeren at 'det er ikke muligt med den for hånden værende teknik'
Avatar billede ossys Mester
25. oktober 2009 - 20:50 #3
@hugopedersen
Jeg er bare en novice i faget, så du må have mig undskyldt hvis dette er noget vrøvl!
Kan du ikke når du lukker programmet ned, checke for alle dine kendte forms for om de er åbne eller ikke ( er pointeren NIL?)

Den ønskede identifikaion af den enkelte form kan gemmes i f. eks. en simpel tektsfil, som indlæses ved opstart af programmet og  heréfter kan de ønskede forms åbnes!

Den er godt nok ikke så sofistikeret, men den virker!
:-)

mvh ossys
Avatar billede kroning Nybegynder
25. oktober 2009 - 21:12 #4
var
    i : integer;
begin
    for i:=0 to Application.ComponentCount-1 do
      if Application.Components[i] is TForm then
    begin
        if (Application.Components[i] as TForm).Visible then
          Showmessage(Application.Components[i].Name); //gem oplysninger
    end;
end;
Avatar billede kroning Nybegynder
25. oktober 2009 - 21:15 #5
Nå, den løsning som a_nor har skrevet virker jo også.
Avatar billede hugopedersen Nybegynder
26. oktober 2009 - 07:18 #6
Der er kun 1 enkelt krølle tilbage så - jeg skal jo kun gemme for mdiChild vinduerne.
Avatar billede ossys Mester
26. oktober 2009 - 12:17 #7
@hugopedersen
Jeg har godt nok ikke selv benyttet min løsning på mdiForms , men du skal vel have en åben mainform (hvor pointeren IKKE kan være nil?) for at have mdiChilds åbne? Disse har vel også en pointer, der er NIL når du du lukker dem?

mvh
ossys
Avatar billede hugopedersen Nybegynder
02. november 2009 - 08:25 #8
Det er nok rigtig nok. Men hvis jeg looper alle forms får jeg også gemt oplysninger for mainform og det er jeg ikke interesseret i.

Jeg har gjort det at jeg har lavet en rutine der køres når de forms jeg ønsker at kunne genåbne creates (det gør jeg jo først når de skal bruges - ingen autocreate) og så gemmer at de er åbne.

Ved start af programmet løber jeg så alle de ønskede forme igennem og creater dem der er gemt oplysninger om.
Ikke så dynamisk som jeg kunne ønske, men det virker.

kroning og a_nor smid lige et svar også. Så får i del i points for input.
Avatar billede ossys Mester
02. november 2009 - 10:06 #9
Du behøver da ikke at gemme oplysninger om hovedformen. Den kender programmet jo selv!

mvh ossys
Avatar billede kroning Nybegynder
02. november 2009 - 10:59 #10
Jeg har ikke bidraget med noget her.
Avatar billede hugopedersen Nybegynder
11. november 2009 - 11:40 #11
Lidt for indsatsen - selv om resultatet blev helt anderledes :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester