Page 2 of 2 FirstFirst 1 2
Results 16 to 25 of 25

Thread: MDIChild free

  1. #16
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Je kan dan toch gewoon iets zeggen als (typ dit uit de losse pols, heb Delphi niet ff bij de hand):
    in mainform:

    Delphi Code:
    1. procedure mainform.listboxdoubleclick(sender: tobject);
    2. begin
    3.    childform.someprocedure;
    4. end;

    in childform:

    Delphi Code:
    1. procedure childform.someprocedure;
    2. begin
    3. #querystuff
    4. for i := mainform.listbox.items.count - 1 downto 0 do
    5. begin
    6.   if mainform.listbox.selected[i] then
    7.   begin
    8.   query.table := mainform.listbox.items.strings[i];
    9.   break;
    10.   end;
    11. end;

    Je zou de loop ook in de mainform zelf kunnen doen en dan als parameter de string kunnen passen. Krijg je zoiets:

    Delphi Code:
    1. procedure mainform.listboxdoubleclick(sender: tobject);
    2. begin
    3. for i := mainform.listbox.items.count - 1 downto 0 do
    4. begin
    5.   if mainform.listbox.selected[i] then
    6.   begin
    7.   childform.someprocedure(mainform.listbox.items.strings[i]);
    8.   break;
    9.   end;
    10. end;

    in childform:

    Delphi Code:
    1. procedure childform.someprocedure(dezetabel: string);
    2. begin
    3. querystuff.table := dezetabel;
    4. end;

    Neem tenminste aan dat het hetzelfde werkt als in vcl forms applications. hoop dat je er wat aan hebt.
    Last edited by GolezTrol; 30-Jul-14 at 10:07.
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  2. #17
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    @rvk:
    Quote Originally Posted by rvk View Post
    Je kent na je Create nergens een Name toe. (en ook geen parent dus is dit wel een childform?)
    Van runtime gecreëerde componenten hoef je de Name property niet in te vullen, die wordt dan vanzelf wel door het VCL framework bepaald.

    Bij een MDI applicatie hoef je het MDIForm geen parent van de MDIChild's te maken, dat gaat automatisch. En niet door Delphi, maar door Windows, want er kan altijd maar één MDIForm per applicatie bestaan. Alle MDIChilds die vervolgens worden gemaakt behoren vanzelf tot het MDIForm.

    @lasci:
    Quote Originally Posted by lasci View Post
    Wat ik tot nu toe heb is:
    Die code zou gewoon goed moeten werken. Wel raad ik aan om beter naamgeving voor de parameters en variabelen te gebruiken. Bovendien is het onnodig en zelfs ongewenst om overal MainForm voor te plaatsen, want je zit al in een method van TMainForm: de enige MainForm die er is dat is hij zelf (Self). Dus:

    Delphi Code:
    1. procedure TMainForm.ShowMDIChild(FormClass: TFormClass; const ACaption: String);
    2. var
    3.   ChildFound: Boolean;
    4.   I: Integer;
    5.   Child: TForm;
    6. begin
    7.   ChildFound := False;
    8.   for I := 0 to MDIChildCount - 1 do
    9.   begin
    10.     if MDIChildren[I] is FormClass then
    11.     begin
    12.       Child := MDIChildren[I] as FormClass;
    13.       if Child.Caption = ACaption then
    14.       begin
    15.         ChildFound := True;
    16.         Child.Show;  //of Child.SetFocus
    17.         Break;
    18.       end;
    19.     end;
    20.   end;
    21.   if not ChildFound then
    22.   begin
    23.     Child := FormClass.Create(Application);
    24.     Child.Caption := ACaption;
    25.   end;
    26. end;

    @BobbaFet:
    Quote Originally Posted by BobbaFet View Post
    Je kan dan toch gewoon iets zeggen als:
    In jouw eerste voorbeeld verwacht je dat een ChildForm (en eigenlijk dus álle ChildForms) de layout en naamgeving van de onderdelen van het MainForm kennen. Dat is onpraktisch, geeft circulaire afhankelijkheden, haalt alle abstractie eruit, en is eigenlijk een nono.
    Last edited by NGLN; 30-Jul-14 at 21:11.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  3. #18
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Ik denk dat Peter het antwoord op jouw vraag al heeft gegeven:

    Quote Originally Posted by VideoRipper View Post
    De event- en de listener-versies sturen beiden "Self" (zichzelf, de form dus) als parameter mee, daar moet je vast wel iets mee kunnen.
    Mocht het allemaal nog steeds onduidelijk zijn, wellicht dat bijgaand voorbeeldje wat licht op de zaak werpt.

    Het voorbeeldprogramma:
    - Opent een Child door te dubbelklikken op een item in de listbox
    - Het type Child A of B wordt bepaald door de tekst van dat item
    - Het Child krijgt een Caption gelijk aan de tekst van het Item
    - Een Child van het type A kan altijd gesloten worden
    - Een Child van het type B kan alleen geminimaliseerd worden, tenzij hij de Caption 'B5' heeft
    - De actieve Child wordt weergegeven in zowel de listbox als in het Window-menu
    - Dubbelklikken op een reeds geopend Child resulteert in activeren i.p.v. opnieuw aanmaken.

    Succes.
    Attached Files Attached Files
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  4. #19
    Die Childforms zijn wel dingen apart hoor tjee. maar goed begin het te begrijpen.



    Ik heb op de childform een DBgrid staan die zou de tabel moeten tonen met als naam de caption van de childform
    Wat mij nog niet duidelijk is het volgende



    Code:
    if not ChildFound then
      begin
        Child := FormClass.Create(Application);
        Child.Caption := ACaption;
        Child.OnClose := ChildClose;
        child.query1.sql.addSQL.Add('Select * from '+Acaption); //<-- dit werkt dus niet, ik kan query1 niet benaderen ????
    
        end;
    Ik zal het wel verkeerd aanpakken, Wat is de juiste methode om die op te zetten ?
    Waar plaats ik nou de DBcomponenten Tdatasourse en Tquery, zet ik die nu op de mainform of op het childform
    Als de childform is aangemaakt bijvoorbeeld A1, hoe benader ik Tquery ?
    Freeware programmer

  5. #20
    Quote Originally Posted by lasci View Post
    child.query1.sql.addSQL.Add('Select * from '+Acaption); //<-- dit werkt dus niet, ik kan query1 niet benaderen ????
    Je moet query1 gewoon kunnen bereiken, hoor.
    Maar wat is .addsql.add?
    Moet het niet gewoon dit zijn?

    child.query1.sql.add('Sel......');
    of
    child.query1.sql.text := 'Sel......';

  6. #21
    Maar wat is .addsql.add? kopieer en plakfoutje
    Freeware programmer

  7. #22
    Quote Originally Posted by lasci View Post
    kopieer en plakfoutje
    Ook in je echte code of alleen naar het forum?

    Werkt het nu wel dan?
    (Anders moeten weer meer meer zien, zoals de code voor je childform)

  8. #23
    Ben nu even bezig met de demo van NGLN
    Freeware programmer

  9. #24
    Ik ben maar wat aan het prutsen en kan de logica niet vinden, wie kan mij antwoord geven op;

    Ik zal het wel verkeerd aanpakken, Wat is de juiste methode om dit op te zetten ?
    Waar plaats ik nou de DBcomponenten Tdatasourse en Tquery, zet ik die nu op de mainform of op het childform

    voordat ik verder ga klooien
    Freeware programmer

  10. #25
    Als je met meerdere childforms gaat werken en die zouden allemaal tegelijk actief moeten zijn met hun eigen SQL en DBGrid e.d. dan zou ik de TDataSource en TQuery dus op de childforms neerzetten (eventueel geconnect naar een algemene TDBConnection op de mainform of datamodule).

    Je weet van te voren n.l. niet hoeveel childforms je aan gaat maken dus je kunt niet een x aantal TQuery's al aanmaken (dat zou heel ongunstig zijn). Ook kun je niet 1 TQuery hebben om mee te schakelen want als je meerdere childforms actief wilt hebben moet je dus meerdere TQuery's hebben. En het logische is deze dan gelijk met de childform tegelijk creëren (dat wordt dan dus in de childform al automatisch gedaan).

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •