Page 1 of 2 1 2 LastLast
Results 1 to 15 of 28

Thread: Hoe/Wat is de beste manier om 192 frames met elk 92 componenten in een Panel te laden

  1. #1
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Exclamation

    Oké hier ben ik dan weer, deze vraag had ik ook al gelijknamig op het vorige Forum geplaatst maar toen ging deze Offline, dus vandaar nog een keer.
    Ik heb een Form, opdat Form is een Treeview geplaatst deze Treeview heeft in totaal ong. 192 items, Naast de Treeview op het Form is een Panel geplaatst, in dat Panel wil ik Frames weergeven, op elk Frame staan 64 TEditboxen, en 32 TLabels. Nu is het de bedoeling dat er ong. 192 Frames gemaakt moeten worden (Dynamisch of niet maakt niet uit). nu wil ik het zo hebben dat als ik op een Item in de Treeview klik dat dan het bijbehorende Frame (geladen) weergegeven wordt in het Panel, je moet het als volgt zien:
    Ik ben bezig om een database (search & sort) programma'tje te maken, we hebben een Flashfiller Database in die database zijn tabellen aanwezig, in die tabellen staan uitteraard velden en records. in die velden staan getallen van 0 t/m 32704 (deze vertegenwoordigen een digitaal uitgangs adres van een klimaat computer, als zo'n getal is omgezet dan ziet het er zo uit bv. 02.04.60)
    nu wil ik dus eerst zoeken naar een getal bv 1. , als ik die gevonden hebt dan wil ik het record nummer en de veldnaam weten, als dat dan bekend is dan wil ik die 2 gegevens in een TEditbox wegschrijven/weergeven, en om het simpel te houden neem ik een Teditbox(nr.) die gelijk is aan het nummer wat ik aan het opzoeken ben.
    Nu is het allemaal leuk en aardig en kan ik wel van tevoren 192 Frames aanmaken met 96 componenten er op, maar ik kan deze uiteraard niet allemaal tegelijk laden (wat ook niet nodig is.) om deze Frames via code op te roepen dien ik (voor zo ver ik weet) wel eerst het Frame in het Panel te plaatsen zodat als het goed is de Panel de Parent van het Frame is, maar om dat nu 192 keer te doen is gekkenwerk plus het feit dat ik tijdens of na het laden van het Form eerste alle 192 Frame moet destroyen, om zo niet in de problemen te komen met recources en geheugen.
    Wat is wijsheid, ik moet ten alle tijden ook al zijn mijn Frames nog niet geladen toch mijn gevonden velden en records kunnen 'wegschrijven' in een TEditbox, en dan pas naderhand wil ik deze terugzien met behulp van de Treeview.
    Iemand suggesties of opmerkingen ?
    In iedergeval alvast bedankt.
    Ik hoop dat iemand er raad mee weet.?

    RLD

  2. #2
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Unhappy vergeten bij mijn vraag

    Oke sorry bij nader inzien is mijn verhaal wat aan de lange kant, ik zal het voortaan wat korter proberen te houden, maar wat ik was vergeten is een jpg bij te voegen om een beetje een indruk tekrijgen van hoe en wat mijn ideeen zijn, dus hier bij is hij bijgesloten.
    RLD

  3. #3
    Ik geloof dat ik het (nog) niet helemaal snap, dus, voor ik met allerlei oplossingen kom waar je niets aan hebt, even voor mijn begrip:

    - Waar komt het getal 192 in de treeview vandaan?

    - Ik heb het idee dat je 192 keer hetzelfde wilt laten zien, alleen de inhoud is anders. Kun je dan niet één panel gebruiken dat je vult met de data van de aangeklikte node in de treeview?

    - Waarom staan er 64 TEditBoxen en 32 TLabels op een panel? Kun je dat niet (bijvoorbeeld) in een grid plaatsen. Je zou dan b.v. kolom 100 kunnen pakken i.p.v. edit 100

    Ik krijg het idee dat je je hele tabel naar je user-interface aan het lezen bent, terwijl je deze misschien ook gewoon uit je TDataSet kunt lezen.

    Kortom, ik snap nog niet helemaal waar je naartoe wilt...
    Marcel

  4. #4
    Ik denk dat hij een master (de treeview) en een detail
    wil maken niet ???

    Als je dat wil doen moet je op de events
    OnChange en on Onchangin Programmeren

    Deze gaan dus af voor het veranderen van een node en na ..

    Daar kan je dit soort routines maken.

    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    var
    JouFrame : TjouFrame ;
    begin
    If Node <> nil then
    // maak hier de instanties van je panels.
    // doe dit op een Panel zodat je ook een leeg scherm kan krijgen( geen node geselecteerd).
    begin
    // Je kan eventueel informatie in de node.data stoppen. ie een object maar ook een nummer

    JouFrame := TjouFrame.Create(Self) ;
    // onthou de referentie ergens
    // dit is een lekkere vieze ..
    Eenpanel.tag := Integer(JouFrame);
    JouFrame.parent := EenPanel ;
    JouFrame.editx.text := Iets ;

    end;
    end;

    procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
    var AllowChange: Boolean);
    begin
    If node <> nil then
    begin
    // waar we hem onthouden hebben kunnen we hem
    // ook weer vinden .
    // misschien wil je nog iets opslaan of zo doe dat
    // dan hier ...
    // dus nu gewoon free aanroepen .
    TjouFrame(Eenpanel.tag).free ;
    end;
    end;
    Delphi Is Just My Dream

  5. #5
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Originally posted by PieterValentijn
    Code:
    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    var
      JouFrame : TjouFrame ;
    begin
      If Node <> nil then
         begin
           JouFrame := TjouFrame.Create(Self) ;
           Eenpanel.tag := Integer(JouFrame);
           JouFrame.parent := EenPanel ;
           JouFrame.editx.text := Iets ;
         end;
    end;
    Eg! Heb jij soms C-roots?
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  6. #6
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Unhappy Reaktie.

    Ik ga eerst eens even kijken of ik wat aan de code van Pieter en (Matthijs) hebt, als het dan nog niet lukt dan zal ik zeer gespecificeert in detail treden, en dan maar hopen dat (we/jullie) er uitkomen, het valt allemaal niet mee als (NEWBIE), maar goed de aanhouder wint 'bijna' altijd zeg ik maar.
    Mijn manieren zijn altijd erg omslachtig, en ik wil altijd veeeel te veel.
    Groetjes en tot morgen, alle tips over nodes en items in een treeview zijn welcom, ik vindt de Help in D5 erg uitgebreid maar toch moeilijk en veeel te weinig Examples.
    RLD

  7. #7
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Lightbulb Hadden jullie dit een beetje in gedachten heren ?

    procedure TFrmMenu.TreeViewChange(Sender: TObject; Node: TTreeNode);
    var
    FrmCp1Cdo1 : TFrame;
    FrmKlantInstall : TFrame;
    FrmKlantGegevens : TFrame;
    FrmEmpty : TFrame;

    begin
    If Treeview.Items.Item[0].Selected = true then
    begin
    GreyBarTekst.Caption := 'Programma Instellingen.';
    FrmEmpty := TFrmEmpty.Create(Self);
    FrmEmpty.Left := 2;
    FrmEmpty.Top := 2;
    FrmEmpty.Height := 370;
    FrmEmpty.Width := 634;
    Panel.Tag := Integer(FrmEmpty);
    FrmEmpty.Parent := Panel;
    end;

    If Treeview.Items.Item[1].Selected = true then
    begin
    GreyBarTekst.Caption := 'Klant Gegevens.';
    FrmKlantGegevens := TFrmKlantGegevens.Create(Self);
    Panel.Tag := Integer(FrmKlantGegevens);
    FrmKlantGegevens.Parent := Panel;
    FrmKlantGegevens.Left := 2;
    FrmKlantGegevens.Top := 2;
    FrmKlantGegevens.Height := 370;
    FrmKlantGegevens.Width := 634;
    end;

    If Treeview.Items.Item[2].Selected = true then
    begin
    GreyBarTekst.Caption := 'Klant Installatie Gegevens.';
    FrmKlantInstall := TFrmKlantInstall.Create(Self);
    Panel.Tag := Integer(FrmKlantInstall);
    FrmKlantInstall.Parent := Panel;
    FrmKlantInstall.Left := 2;
    FrmKlantInstall.Top := 2;
    FrmKlantInstall.Height := 370;
    FrmKlantInstall.Width := 634;
    end;

    if TreeView.Items.item[3].Selected=true then GreyBarTekst.Caption := 'I/O Lijsten.';
    if TreeView.Items.item[4].Selected=true then GreyBarTekst.Caption := 'Celpro 1.';
    if TreeView.Items.item[5].Selected=true then GreyBarTekst.Caption := 'Digitale Uitgangen.';

    If Treeview.Items.Item[6].Selected = true then
    begin
    GreyBarTekst.Caption := 'Celpro 1, Cdio 1. Digitale Uitgangen.';
    FrmCp1Cdo1 := TFrmCp1Cdo1.Create(Self);
    Panel.Tag := Integer(FrmCp1Cdo1);
    FrmCp1Cdo1.Parent := Panel;
    FrmCp1Cdo1.Left := 2;
    FrmCp1Cdo1.Top := 2;
    FrmCp1Cdo1.Height := 370;
    FrmCp1Cdo1.Width := 634;

    end;
    end;

    procedure TFrmMenu.TreeViewChanging(Sender: TObject; Node: TTreeNode;
    var AllowChange: Boolean);
    begin
    If node <> nil then
    begin
    if panel.Tag > 0 then
    begin
    TFrame(Panel.Tag).Free;
    panel.Tag :=0;
    end;
    end;
    end;
    RLD

  8. #8
    Laten we eens proberen je code wat op te schonen, want voor je het weet heb je 192 if's achter elkaar staan. Ik los dat meestal op door een object te maken waarin je je data kunt stoppen en vervolgens een TList waar je deze objecten dan weer in stopt.
    Als eerste het object:

    Code:
    TFrameItem = class(TObject 
    private 
      FFrame: TCustomFrame; 
      FFrameClass: TCustomFrameClass; 
      FCaption: string; 
    public 
      property FrameClass: TCustomFrameClass read FFrameClass write FFrameClass; 
      property Frame: TCustomFrame read FFrame write FFrame; 
      property Caption: string read FCaption write FCaption; 
     
      constructor Create(FrameClass: TCustomFrameClass; Caption: string); 
    end;
    Code:
    { TFrameItem } 
    constructor TFrameItem.Create(FrameClass: TCustomFrameClass; 
      Caption: string); 
    begin 
      inherited Create; 
      FFrameClass := FrameClass; 
      FCaption := Caption; 
    end;
    Hierin kun je dus een frameclasse opslaan, als je het frame later nodig hebt kun je dat aanmaken en in de betreffende property zetten. Nu hebben we een lijst nodig om deze objecten in op te slaan. Vervolgens ga je de lijst vullen met de betreffende panelclasses. O ja, deze moet je nog wel even definieren. Als je dus een panel TJouwPanel hebt moet je daarbij ook een TJouwPanelClass = class of TJouwPanel
    aanmaken.

    Code:
    TForm1 = class(TForm) 
      TreeView1: TTreeView; 
      Panel1: TPanel; 
      procedure TreeView1Change(Sender: TObject; Node: TTreeNode; 
    private 
      FFrameList: TObjectList; 
    public 
      constructor Create(AOwner: TComponent; override; 
      destructor Destroy; override; 
    end;
    Code:
    constructor TForm1.Create(AOwner: TComponent; 
    begin 
    inherited; 
      FFrameList := TObjectList.Create; 
    
      FFrameList.Add(TFrameItem.Create(TFrame, 'Vragen staat vrij op NLDelphi...'); 
    end;
    Je OnChange event wordt nu een stuk korter:

    Code:
    procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode; 
    var 
      FrameItem: TFrameItem; 
    begin 
      FrameItem := TFrameItem(FFrameList[TreeView1.Selected.Index]); 
    
      if FrameItem.Frame = nil then 
        FrameItem.Frame := FrameItem.FrameClass.Create(Self; 
    
      FrameItem.Frame.Left := 2; 
      FrameItem.Frame.Top := 10; 
      FrameItem.Frame.Height := 370; 
      FrameItem.Frame.Width := 634; 
      FrameItem.Frame.Parent := Panel1; 
    end;
    Op deze manier voorkom je dus dat je al je verschillende panels in je event moet zetten, deze staan nu wat netter in de Create van je form. Toch worden ze pas aangemaakt als ze nodig zijn.
    Marcel

  9. #9
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Ik heb nog geen D5 dus misschien is het niet helemaal goed en zijn er bij D5 meer mogelijkheden, maar ik heb het op de volgende manier opgelost.
    Een TreeNode heeft helaas geen Tag-propertie, maar als je een mooie TreeView wilt hebben zul je toch ook Images gebruiken. Deze misbruik ik om te bepalen welke MDIchild-form (in jouw geval welke Frame) er getoond moet worden.
    Door een array te maken van TFrameClass kun je dus iets gaan roepen als:
    Code:
      ZichtbaarFrame.Free;
      ZichtbaarFrame := FrClsArray[TreeView1.Selected.ImageIndex].Create( ...
      // etc.
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  10. #10
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Unhappy Ik denk dat ik het niet helemaal snap.

    Sorry Marcel, ik heb je code getracht te inplementeren maar het lukt niet echt, allereerst is het de bedoeling of zo dat ik een nieuwe Unit aan maak voor deze code of zo ?
    Waar moet dit gedeelte geplaatst worden ?
    code:--------------------------------------------------------------------------------
    TFrameItem = class(TObject
    private
    FFrame: TCustomFrame;
    FFrameClass: TCustomFrameClass;
    FCaption: string;
    public
    property FrameClass: TCustomFrameClass read FFrameClass write FFrameClass;
    property Frame: TCustomFrame read FFrame write FFrame;
    property Caption: string read FCaption write FCaption;

    constructor Create(FrameClass: TCustomFrameClass; Caption: string);
    end;
    --------------------------------------------------------------------------------


    code:--------------------------------------------------------------------------------
    { TFrameItem }
    constructor TFrameItem.Create(FrameClass: TCustomFrameClass;
    Caption: string);
    begin
    inherited Create;
    FFrameClass := FrameClass;
    FCaption := Caption;
    end;


    en waar dit ?
    code:--------------------------------------------------------------------------------
    constructor TForm1.Create(AOwner: TComponent;
    begin
    inherited;
    FFrameList := TObjectList.Create;

    FFrameList.Add(TFrameItem.Create(TFrame, 'Vragen staat vrij op NLDelphi...');
    end;
    --------------------------------------------------------------------------------

    Sorry, dat ik het nog niet snap.
    RLD

  11. #11
    Geen probleem, soms schat ik even verkeerd in wat ik wel en niet moet uitleggen. En helemaal duidelijk vond ik het achteraf ook niet echt .

    Ik heb even een voorbeeldje gemaakt van wat ik bedoelde, dat kun je hier downloaden:

    www.nldelphi.com/download/frametest.zip

    Ik hoop dat het dan allemaal wat duidelijker wordt...

    suc6,

    Marcel
    Marcel

  12. #12
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Talking Bedankt

    Hartstikke Bedankt he Marcel, het werkt als een trein.
    dit geeft weer een beetje moed, nu gaat ik weer vrolijk verder met de rest 'programeren' het einde is nog lang niet in zicht (denk pas over zo'n 500 a 600 uur) dit is uiteraard gebaseerd op mijn skills met D5, plus wat jij al zei de hoeveelheid daar verkijk je je ALTIJD op.
    maar goed, als dit programma af is dan heb ik een MEESTER tutorial voor mijn bedrijf geschreven, dit werk zou eigenlijk onze progammeur moeten doen maar ja die heeft zoals gewoonlijk heel weinig tijd, (en de zin)
    want hoe je het draaid of keert het zal uiteindelijk niet extreem moeilijk wezen om dit te maken, maar wel heel veel werk.
    Maar goed, ik ga zoals Pieter altijd zegt, ook maar even door met op de knop(jes) bonken, het is gewoon verslaafend. als ik weer een probleemje heb dan horen jullie het wel, uiteraard ik eerst zelf proberen op te lossen, maar als ik er na 4 a 8 uur nog niet uit ben dan geef ik wel even een seintje, en als het af is dan stel ik hem wel even te download. dan kan je zien hoe en wat.

    Groeten uit een Donker en Alcoholish Alkmaar (hik, hik)
    RLD

  13. #13
    5th member of nldelphi
    Join Date
    Mar 2001
    Location
    Alkmaar
    Posts
    2,127

    Unhappy vergeten,

    Natuurlijk kom ik wel even elke dag kijken of er nog leesvoer op het forum is.

    En wat mij betreft mag deze 'Threat' afgesloten worden.
    Hij is al pittig aan de lange kant.
    RLD

  14. #14
    Groeten uit een Donker en Alcoholish Alkmaar (hik, hik)
    Pas maar op, daar kun je heeeele vreemde programma's van krijgen
    Marcel

  15. #15
    TDigitalTrain user Hans Brenkman's Avatar
    Join Date
    Mar 2002
    Location
    Weert
    Posts
    1,861
    Marcel, ik heb jouw voorbeeld Framtester gepakt om frames te maken vanuit menutopties. Dit werkt prima maar ik zie dat eenmaal gecreëerde Frames niet meer weggaan. Er komt gewoon een 2e frame op het 1e te liggen. Dit kun je zien door TMyFrame en TYourFrame te creëren maar dan de property Align NIET op alClient te zetten. Gevolg hiervan is dat een actionlist gemaakt op TMyFrame ook nog actief is op TYourFrame.
    Ik heb geprobeerd voordat er een nieuw frame gemaakt wordt, een reeds bestaand frame te verwijderen maar dat lukt me niet met FrameItem.Free.

    Hoe kan ik voordat ik een nieuw frame maak, een reeds bestaand frame verwijderen ?
    Attached Files Attached Files

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Replies: 7
    Last Post: 28-Aug-02, 00:42

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
  •