Avatar billede hugopedersen Nybegynder
17. januar 2009 - 11:15 Der er 15 kommentarer og
1 løsning

Gemme positioner på vindue

Findes der en funktion ude i den store kodegryde der kan gemme en forms placering og størrelse når den lukkes og indlæse den igen når formen åbnes.

Der må findes et eller andet, men jeg synes ikke lige jeg har kunnet finde det helt rigtige.
Avatar billede spil2vind Nybegynder
17. januar 2009 - 11:20 #1
Ikke mig bekendt, du må gemme værdierne i en fil, som du så kan læse når programmet startes
Avatar billede kroning Nybegynder
17. januar 2009 - 11:26 #2
Jeg plejer at lave en grundform som alle andre forme så arver fra, i grundformen gemmer jeg formens position og størrelse i regbasen.


procedure TMDIGrundForm.SaveWindowPos;
var
  Reg : TRegistry;
begin
  Reg:=TRegistry.Create;
  Reg.Rootkey:=HKEY_CURRENT_USER;
  Reg.Openkey('Software\ditprogramnavn',true);

  Reg.WriteInteger(Caption+' top',top);
  Reg.WriteInteger(Caption+' left',left);
  Reg.WriteInteger(Caption+' width',width);
  Reg.WriteInteger(Caption+' height',height);

  Reg.Free;
end;

procedure TMDIGrundForm.LoadWindowPos;
var
  Reg : TRegistry;
begin
    Reg:=TRegistry.Create;
  Reg.Rootkey:=HKEY_CURRENT_USER;
  Reg.Openkey('Software\ditprogramnavn',true);

  if Reg.ValueExists(Caption+' top') then
  begin
        try
            top:=Reg.ReadInteger(Caption+' top');
      left:=Reg.ReadInteger(Caption+' left');
      if BorderStyle<>bsSingle then
      begin
          width:=Reg.ReadInteger(Caption+' width');
          height:=Reg.ReadInteger(Caption+' height');
      end
      else
                width:=POrgWidth;
      except
          ShowMessage('Fejl under indlæsning af vindue pos oplysninger.');
      end;
  end
  else
      width:=POrgWidth;

  Reg.Free;
end;

procedure TMDIGrundForm.FormCreate(Sender: TObject);
begin
//    MDIGrundForm.Width:=0; // skjul MDIGrundForm
  POrgWidth:=Width;
  LoadWindowPos;
end;

procedure TMDIGrundForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    SaveWindowPos;
//    Action:=caFree;
end;
Avatar billede hugopedersen Nybegynder
17. januar 2009 - 16:47 #3
'en grundform som alle andre forme så arver fra'

Den må jeg nok lige have skåret ud i bølgepap. Det lyder som noget rigtigt smart men jeg er ikke med på hvad, hvordan.
(jeg er gammel TurboPascal og VB programmør så meget af det her Delphi fancy noget er helt volapyk for mig endnu)
Avatar billede kroning Nybegynder
17. januar 2009 - 17:10 #4
Jeg bruger Delphi 7 og gør man således:

Vælg i menuen File > New > Other
Vælg fanen med dit Project navn
Vælg din grund form eller hvilken form du nu ønsker
Der skal være prik i Inherit
Tryk OK

Alt hvad der er af kode og komponenter på din grundform bliver nu arvet af din nye form, dvs. hvis du ændre noget på din grundform bliver det automatisk ændret på alle de forme der arver herfra.
Avatar billede hugopedersen Nybegynder
17. januar 2009 - 17:25 #5
OK - det vil sige det er en form for 'template' hvis man kan sige det.

Jeg kan se i din kode at du har en variabel der hedder POrgWidth - hvad bruges den til og hvor tildeles den værdi? (kan kun se at du læser fra den) - men det er jo nok heller ikke hele din kode du har vist her.

Vil man ikke også kunne lave det som vist nok hedder en class som man så kalder med formens navn (FromProperties.Save(Self)) og så få den til at gøre arbejdet?

Jeg fik noget kode fra borrisholt til at gemme en fil med nogle indstillinger. Det var sådan en class fidus. Måske skal jeg lige checke det program hvor jeg bruger det. og så se om ikke det var en løsningsmetode.
Avatar billede kroning Nybegynder
17. januar 2009 - 18:06 #6
POrgWidth kan du bare fjerne.
Avatar billede hugopedersen Nybegynder
20. januar 2009 - 15:21 #7
Jeg er endt op med at lave en lille unit med funktioner til at gemme og hente formpositioner i registry.
Den gemmer kun position, ikke størrelse (endnu)

Det fungerer efter hensigten i den lille demo jeg har lavet til at teste det med. Så det bliver nok den vej jeg går.
Avatar billede spil2vind Nybegynder
20. januar 2009 - 15:31 #8
Tror måske der vil være lidt problemer med at bruge det under Vista
Avatar billede hugopedersen Nybegynder
20. januar 2009 - 16:56 #9
Definer problemer.
Hvis det kan du nemt få en kopi af mit testsetup for at prøve det.
Avatar billede spil2vind Nybegynder
20. januar 2009 - 17:12 #10
For at udføre det ting, som Kroning har beskrevet skal programmet køres med administrator rettigheder
Avatar billede kroning Nybegynder
20. januar 2009 - 19:59 #11
Også når det er HKEY_CURRENT_USER ?

Jeg har ikke Fista så jeg kan ikke teste det.
Avatar billede spil2vind Nybegynder
20. januar 2009 - 20:33 #12
Lad mig få en kopi af dit test setup, så tester jeg lige engang om jeg tager fejl
Avatar billede hugopedersen Nybegynder
20. januar 2009 - 20:47 #13
Send mig lige en reminder mail på adressen

hp snabelting consol punktum dk

så skal jeg sende det i morgen når jeg kommer på arbejde. Min memorystick med backup ligger ude på mit skrivebord :-)
Avatar billede hugopedersen Nybegynder
21. januar 2009 - 06:57 #14
Testmateriale er sendt til afsender af modtagne mail
Avatar billede spil2vind Nybegynder
21. januar 2009 - 08:17 #15
Har testet det på en Vista 64 bit og det virker perfekt, så Kroning havde ret med hensyn til at Vista accepter skrivning til HKEY_CURRENT_USER
Avatar billede hugopedersen Nybegynder
02. februar 2009 - 13:05 #16
Gik videre af den vej jeg selv kom frem til og som vist i test sendt til spil2vind
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

IT-JOB