Avatar billede kingguro.dk Nybegynder
13. februar 2004 - 16:37 Der er 7 kommentarer og
1 løsning

Forme inde i en Scrollbox?

Når jeg har oprettet en ny form, skal den kun kunne flyttes rundt inde i en scrollbox? Hvordan er det muligt?
Avatar billede hrc Mester
13. februar 2004 - 22:34 #1
Tænker du på MDI-applikationer hvor formene ligger indenfor rammerne af en "over"-form (ligesom MS-Excel)?
Avatar billede hrc Mester
13. februar 2004 - 22:38 #2
Hvis jeg gættede rigtigt så skal du lave en "over"-form og sætte dens FormStyle til MDI-form. De efterfølgende forme (i første niveau efter overformen) sættes til MDI-child. Violá har du en MDI-applikation.
Avatar billede kingguro.dk Nybegynder
15. februar 2004 - 12:53 #3
Okay, jeg leger lige lidt med det :)
Avatar billede kingguro.dk Nybegynder
15. februar 2004 - 13:01 #4
Det var lige præcis det som jeg mente :) Hvis du vil ligge et svar, så vil jeg give dig dine velfortjente point :)

Tak for hjælpen!
Avatar billede kingguro.dk Nybegynder
15. februar 2004 - 13:19 #5
Lige et spørgsmål til? Når jeg opretter en form som er fsMDIform og så opretter en anden form som fsMDIChild, så kommer fcMIDchild'formen automatisk frem i form1 uden at jeg har skrivet noget kode? Det er jo ikke meningen?
Avatar billede hrc Mester
15. februar 2004 - 16:50 #6
Det er nok fordi din Delphi opretter formene automatisk. Du kan klikke dem fra og til i ... min Delphi er gået ned ... projects/properties (noget med skift-alt-F11) tror jeg nok. Den eneste form du bør vise automatisk er din main-form.

Resten er noget med at søge i listen over åbne MDIChilds (der findes en liste i TForm) og hvis du klikker på "knappen" og formen du vil åbne allerede er oprettet, så sætter du bare fokus, alternativt opretter og viser du det.

Husk i øvrigt at sætte MDI-child'ets OnClose event:

begin
  Action := caFree;
end;
Avatar billede kingguro.dk Nybegynder
15. februar 2004 - 16:56 #7
Mange tak.. Du er bare svart på alle mine bønner :)
Avatar billede hrc Mester
15. februar 2004 - 17:29 #8
Åhh, nu rødmer jeg ;-). Jeg sender lige lidt mere. Min ShowMDIChild funktion nedenfor leder efter formen i MDIChild listen og hvis den findes, så returnerer den. Hvis ikke så opretter jeg den. Mit MDIChild har en label1 på formen og den sætter jeg bagefter (det er derfor jeg returnerer den fundne/oprettede form - det kan jo være at jeg skal lave lidt mere end bare oprette den.

Mine forme viser sig også straks jeg opretter dem - det er åbenbart ikke helt som jeg huskede det.

Min funktion er i øvrigt en variant af Delphi's egen CreateForm og som du kan se, så fodrer jeg den med klassenavnet, ikke et oprettet objekt. Vidste du i øvrigt at du kan springe til koden ved (i en proj der er compileret) at klikke på eksempelvis CreateForm samtidig med at ctrl-tasten er trykket ned. I øverste højre hjørne har du to pile som du så kan bladre frem og tilbage med.


function TfrmMain.ShowMDIChild(InstanceClass: TComponentClass): TForm;
var
  i : integer;
  bFound : boolean; // b for boolean (ikke konsekvent) ...
  Instance: TForm;
begin
  i := -1; bFound := false;
  while (i < MDIChildCount - 1) and not bFound do begin
    inc(i);
    bFound := MDIChildren[i] is InstanceClass;
  end; // while

  if bFound then
    result := MDIChildren[i]
  else
    result := TForm(InstanceClass.NewInstance).Create(self);
end;

procedure TfrmMain.dsf1Click(Sender: TObject);
begin
  with TfrmSub(ShowMDIChild(TFrmSub)) do // Sending class not object
    Label1.Caption := 'Here we go!';
end;
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