Ansteuerung von Treeview Die Ansteuerung des MS Treeview-Controls unter Microsoft Visual FoxPro
Diese Schulung dient der Einführung in die Ansteuerung von Treeview-Controls sowie der Darstellung einer Meta- datengesteuerten Treeview-Klasse unter Microsoft Visual FoxPro
Themenübersicht Treeview-Control Nodes Images LoadTree LoadNodes Konfiguration, interner Cursor Events, Images Metadatenstruktur Aufrufreihenfolge Sonstige Hinweise
Die Komponenten des Treeview-Controls unter Microsoft Visual FoxPro Grundaufbau Treeview Die Komponenten des Treeview-Controls unter Microsoft Visual FoxPro
Wo finde ich was? Treeview-Control in COMCTL32.DLL Hilfedatei unter COMCTL1.HLP oder CTRLREF.HLP Stichwort: Strukturansicht (Treeview) Beispiel unter ACTIVEX.VCX (Buch)
Treeview-Control (1) Eigenschaften: Eigenschaften: Visible, Enabled BorderStyle, LineStyle LabelEdit Scrollbars Height, Width, Top, Left Imagelist (!) Eigenschaften: Sorted Nodes (!)
Treeview-Control (2) Methoden: Ereignisse: Clear SetFocus GetVisible, HitTest StartLabelEdit Remove Refresh Ereignisse: Before/AfterLabel Edit Node/Click, DblClick Collapse, Expand DragDrop, DragOv MouseDo/Up/Move KeyDown/Up/Press Got/LostFocus
Nodes-Control Eigenschaften: Enabled, Visible Text Index, Key Expanded(Image) (Selected)(Image) Root Methoden: Add (relative, relationship, key, text, image, selectedimag) Clear CreateDragImage EnsureVisible Item (Index / Key ) Remove (dito)
ImageList-Control Eigenschaften: BackColor MaskColor ImageHeigth / Width ListImages Index Name Eigenschaften: Tag Object Parent Methoden: Overlay
Einfaches Treeview-Beispiel Einfaches Beispiel zur Treeview-Ansteuerung für Microsoft Visual FoxPro
LoadTree Buch: Rod Paddock, ACTIVEX.VCX (Code auch in „Notizen“ zu den Slides) Parameter: Key, Parent Key, Description This.Nodes.Add( ) ggf. This.LoadNodes( ) eigene Funktion *-- Method loadTree *-- This method receives a table with a minimum of three *-- fields: *-- 1) A primary key field *-- 2) A parent key field *-- 3) A description field. *-- The root nodes of the tree view are the fields where *-- primary key = parentkey. This function is passed the alias of the *-- table and then calles the loadnode function. Lparameters pcTable, pcParentOrder *-- Save the work area Local lnSelect lnSelect = Select() Select (pcTable) Scan For parentkey = primarykey This.Nodes.Add(,,"KEY" + &pcTable..primarykey, &pcTable..description) *-- If this is a parent then load the parent records. If Seek(&pcTable..primarykey,pcTable,pcParentOrder) This.LoadNode(pcTable, &pcTable..parentkey,pcParentOrder) Endif Endscan *-- Restore the work area Select (lnSelect)
LoadNode Parameter: DBF, Key, ParentOrder SCAN-Schleife über Child Node addieren Recno merken (!) Falls Subchilds: Rekursiver Aufruf Recno wiederherstellen *-- Method LoadNode Lparameters pcTable, pcKeyToLoad, pcParentOrder *-- Save the work area Local lnSelect, lnRecno, lnRecno2, lcPrimaryKey lnSelect = Select() lnRecno = Recno() Select (pcTable) Go Top Scan For parentkey = pcKeyToLoad lcPrimaryKey = &pcTable..primarykey If &pcTable..parentkey # lcPrimaryKey This.Nodes.Add("KEY" + pcKeyToLoad,4,"KEY" + lcPrimaryKey, &pcTable..description) *-- Save the record pointer prior to the child test lnRecno2 = Recno() *-- If this record is a parent then load its children If Seek(lcPrimaryKey,pcTable,pcParentOrder) This.LoadNode(pcTable, lcPrimarykey,pcParentOrder) Endif *-- Restore the record pointer If lnRecno2 # 0 Goto lnRecno2 Endscan *-- Restore the work area Select (lnSelect) If lnRecno # 0 Goto lnRecno
Treeview-Klassenbibliothek Beispiel für eine Wrapper-Klasse um das Treeview-Control unter Microsoft Visual FoxPro
Konfiguration, interner Cursor Konfigurationsmöglichkeit INI-Datei Verwendung von GetPrivateProfileString() Konfiguration der Metadatentabellen / Parameter Verwendung INCLUDE-Datei Konstanten/Funktionen in .h-Datei (genericname) Datenablage in internem Cursor Info-Funktion zum Auslesen Cursordaten schneller als FindItem (durch Treeview scannen)
Events, Images Herauslegung diverser Events Collapse, Expand Click, Doubleclick, Rightclick Achtung: Unterscheidung nur Mousedown mögl. Dynamisches Laden der Bitmaps Referenz auf object.listimages .Add( loadpicture( ) ) Achtung: Keine numerischen Schlüssel
Metadatensteuerung Beispiel für eine Metadatensteuerung für das Treeview-Control unter Microsoft Visual FoxPro
STR-Metadatei CID (Primärschlüssel) SORT (Sortierkennzeichen) CODE (externer Aufrufcode für Ebene) RECCNT (Satzzähler einblenden) NAME (Anzeigetext) VALID (Gültigkeitsschalter) Diverse Image-Felder IMAGE / IMAGEEXPAN / IMAGEKEY / ..KEYEX / COND
STRPAGE-Metadatei Allgemein CID (Primärschlüssel) CPARENTCID (Zuordnung zu STR) MODUL (Modulzuordnung für VCX-Laden) VALID (Gültigkeitsschalter) ENABLED (Element disabled dargestellt) VISIBLE (Element sichtbar dargestellt) READONLY (Element Readonly dargestellt)
STRPAGE-Metadatei (Sort 0) SORT (0 für Zuordnung zu STR) Diverse Tabellendaten CHILD, CHILDALIAS für Tabelle CHILDFK für Schlüssel FILTER, CTYP für Filter und SET KEY-Eingrenzung CAPTION / EVAL (Text in Treeview) MENUE (Kontextmenü für Treeview) CLASS / CLASSLIB (Managerklasse)
STRPAGE-Metadatei (Sort!=0) SORT (Reihenfolge der Reiter in Pageframe) Diverse Tabellendaten für Childtabelle CHILD, CHILDALIAS für Tabelle CHILDFK für Schlüssel FILTER, CTYP für Filter und SET KEY-Eingrenzung CAPTION / EVAL (Text für Reiter) MENUE (Shortcut-Menü in Reiter) CLASS / CLASSLIB (Container in Reiter)
Programmierung Treeview Programmierung einer Meta-datensteuerung für Treeviews unter Microsoft Visual FoxPro
Initialisierung Metadaten LoadTreeviewMetaData OpenTreeviewStrTables OpenTable LoadClassLibsFromModules AddLevel
Neue Ebene anlegen AddLevel AddLeveltoTreeview AddManager SetManager AddPageFrame AddPage
Navigieren im Treeview NavigInTable SetManager NavigInAllPages NavigInPage
Custom-Page-Klasse Custom Page-Klasse notwendig u.a. für folgende Methoden: Activate( ) RightClick( ) ggf. ShowWhatsThis( )
Komplexere Steuerungen Hierarchische Berechnungen sehr zeitaufwendig bei der Optimierung Bei komplexeren Treeviews Trennung zwischen Manager- und Zeilenobjekt Editor und Validier-Funktionen für Metadaten sinnvoll aber aufwendig
Sonstige Hinweise Sonstige Hinweise zum Einsatz des Treeview-Controls unter Microsoft Visual FoxPro
Performance beim Aufbau Kleiner Performance-Trick: treeview.Visible = .F. treeview.Top = treeview.Top + 9999 *-- Treeview mit Daten füllen treeview.Top = treeview.Top - 9999 treeview.Visible = .T. (erspart Refresh-Zeiten des Treeviews)
Problem bei neuerer Version COMCTL32.OCX ab 97 vergeßlich: TreeView.Init: this.object.ImageList = thisform.imagelist1.object ListView.Init: this.object.Icons = thisform.imagelist2.object this.object.SmallIcons = thisform.imagelist3.object Außerdem: nicht abwärtskompatibel
Weitere Ideen Wegschalten des Treeviews wie bei der neuen HTML-Hilfe von Visual FoxPro Schalter für verschiedene Breite des Treeview-Controls zum Platzsparen Multiple Instanzen von Masken mit/ohne Treeview-Control „Abreißbare“ Pages als Einzelmasken
Was ist zu beachten? Container um Treeview bauen Interner Cursor für Daten-verwaltung Events / Images Metadaten sehr leistungsfähig Neue Versionen!
Vielen Dank! Das waren die Themen: Treeview-Control Nodes Images LoadTree LoadNodes Konfiguration, interner Cursor Events, Images Metadatenstruktur Aufrufreihenfolge Programmierhinweise Sonstige Hinweise...
Wenn Fragen bestehen: Wizards & Builders Frankfurter Str. 21b Methodische Software-Entwicklung GmbH Frankfurter Str. 21b 61476 Kronberg Tel.: 06173-950906 Fax: 06173-950907 CIS: 101605,175