Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TreeView als Navigation (https://www.delphipraxis.net/138651-treeview-als-navigation.html)

Jackie1983 14. Aug 2009 07:17


TreeView als Navigation
 
Servus,

ich habe 5 Buttons. Je nach Button werden anderen Werte ins TreeView geschrieben.
Angenommen ich habe so ein TreeView
Delphi-Quellcode:
[-] Menü_1
 .....Untermenü_1
 .....Untermenü_2
[+] Menü_2
[-] Menü_3
 .....Untermenü_1
Wenn ich jetzt auf Menü_1 oder Untermenü_1 klicke möchte ich das eine Funktion aufgerufen wird.
Die Funktion braucht aber auch übergabenparameter.
Habe mir überlegt es so zumachen
Delphi-Quellcode:
TMyProcedure = procedure of Object;
TNaviTree = record
  proc : TMyProcedure;
  parameter : pointer;
end;
//...
var
  navi : TNaviTree;
begin
  //schleife
  new(navi);
  navi.proc := blabla;
  navi.parameter := daten;
  //im tree einfügen
end;
was meint ihr, die idee so gut oder hat jemand ne andere Idee?
Gruß

jaenicke 14. Aug 2009 07:28

Re: TreeView als Navigation
 
Das kommt darauf an wie der Rest vom Code aussieht. Ich selbst benutze eine TreeView meistens, wenn ich mehrere Seiten auf dem Formular habe. Da nehme ich dann ein PageControl, dann kann ich direkt den absoluten Index des ausgewählten Eintrags als neuen Seitenindex setzen, fertig. Ggf. noch mit Offset, wenn es mehrere Bäume gibt.
Und man kann ja auch einen benutzerdefinierten Integerwert einfach in Data legen.

Wenn bei dir da eine Methode aufgerufen werden muss und das nicht ähnlich einfach umsetzbar ist, dann ist das so ein gangbarer Weg. Du musst aber darauf achten, dass der Record überall auch immer korrekt freigegeben wird. Zudem fehlt deinem TMyProcedure noch der Parameter. ;-)

Jackie1983 14. Aug 2009 08:03

Re: TreeView als Navigation
 
Zitat:

Zitat von jaenicke
Zudem fehlt deinem TMyProcedure noch der Parameter. ;-)

Zitat:

Zitat von Jackie1983
Delphi-Quellcode:
TMyProcedure = procedure of Object;
TNaviTree = record
  proc : TMyProcedure;
  parameter : pointer;
end;

Der Parameter für die Procedure liegt in TNaviTree. So können bei proc verschiedene Proceduren hinterlegt werden ohne das ich an die parameter gebunden bin.

jaenicke 14. Aug 2009 20:57

Re: TreeView als Navigation
 
Zitat:

Zitat von Jackie1983
Der Parameter für die Procedure liegt in TNaviTree. So können bei proc verschiedene Proceduren hinterlegt werden ohne das ich an die parameter gebunden bin.

Und wie willst du das an die Prozedur übergeben? :gruebel:
Delphi-Quellcode:
TMyProcedure = procedure of Object;
Ich meinte das so:
Delphi-Quellcode:
TMyProcedure = procedure(Param: Pointer) of Object;

alzaimar 15. Aug 2009 06:25

Re: TreeView als Navigation
 
Falls es einigermaßen überschaubar ist, würde ich einfach das einfach über eine Case-Anweisung im NodeChanged-Ereignis(?) lösen. Dabei könnte man den ImageIndex verwenden, dann hätten die Knoten auch noch nette Bildchen. Ich halte das für übersichtlicher.

Ach, das hat jaenicke ja fast so schon geschrieben.

Jackie1983 15. Aug 2009 14:28

Re: TreeView als Navigation
 
Zitat:

Zitat von jaenicke
Und wie willst du das an die Prozedur übergeben? :gruebel:
Delphi-Quellcode:
TMyProcedure = procedure of Object;
Ich meinte das so:
Delphi-Quellcode:
TMyProcedure = procedure(Param: Pointer) of Object;

Ganz einfach wenn im Tree geklickt wurde greifst du auf Data aus dem Node zu.
Da ist ein Record. Im Record haste deine Procedure abgelegt und die Parameter in Pointer.
Dann liest man die Procedure aus und ruft diese mit den Daten aus dem Pointer auf fertig.

habe es aber jetzt anders gelöst.
Delphi-Quellcode:
type
  TNaviType = (ntMenue1 = 0,
               ntMenue2);

  pTreeNavigation = ^rTreeNavigation;
  rTreeNavigation = record
    Kategorie : TNaviType;
    pData1, pData2 : Pointer;
    sData1, sData2 : string;
  end;
pTreeNavigation wird bei Data hinterlegt.
Wenn auf ein Node geklickt wurde wird das record ausgelesen.
Je nach ntMenue id wird eine andere Procedure aufgerufen.
Die Parameter für die Procedure sind im Pointer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz