![]() |
TTreeView - in abgeleiteter Komponente OnCompare nutzen
Moin, Moin,
seit einigen Stunden bastle ich an einer Komponente, die von TTreeView abgeleitet ist. Hiermit wird das TreeView um ein StandardPopup erweitert, das zusätzliche Layout- und Sortierfunktionalitäten zur Verfügung stellt. Dank der Unterstützung von shmia ist nun auch das Verbinden von Komponenten-Popup und Anwendungs-Popup gelungen. In der Testphase habe ich alle Funktionalitäten nicht in einer abgeleitete Komponente, sondern in einer normalen Unit programmiert und erst nachdem dort alles fehlerfrei ablief, alles in eine Komponente "gepackt". Dummerweise komme ich aber am letzten Punkt überhaupt nicht weiter: Um eine auf- und absteigende Sortierung, wahlweise mit/ohne Berücksichtigung der Groß-/Kleinschreibung zu ermöglichen habe ich in der Testphase im OnCompare-Event folgenden Code hinterlegt (SortFlag=1 or -1 >> auf- oder absteigend sortieren):
Delphi-Quellcode:
Und an diesem Punkt, diese zwei Zeilen in der abgeleiteten Komponente zu placieren, scheitere ich, kurz vor dem Ziel, kläglich! In TTreeView ist OnCompare als Property deklariert. In TCustomTreeView als Property vom Typ TTVCompareEvent. Ich habe schon die unmöglichsten Versuche gemacht, die obenstehenden zwei Zeilen in die abgeleiteten Komponente einzubauen - es ist mir nicht gelungen. Das ist doch bestimmt keine Hexerei, das hinzubekommen?!
procedure Tfo~~.TreeView1Compare(Sender:TObject;Node1,Node2:TTreeNode;
Data:Integer;var Compare:Integer); begin if CaseSensitiveSort then Compare:=CompareStr (Node1.Text,Node2.Text)*SortFlag else Compare:=CompareText(Node1.Text,Node2.Text)*SortFlag; end; :wall: Tja, nun benötige ich wieder 'mal Hilfestellung aus dem Forum - please help! |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Moin Ralph,
du möchtest den Code für das Ereignis OnCompare() in deiner abgeleiteten Komponente fest verdrahten? Dann veröffentliche einfach die Property OnCompare nicht und besetze sie im Konstruktor mit deinem Code:
Delphi-Quellcode:
Getippt und nicht getestet.
type
TMyTreeView = class(TCustomTreeView) private CompareNodes(Sender:TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer); published // ... property OnCollapsing; // property OnCompare; property OnContextPopup; // ... end; constructor TMyTreeView.Create(AOwner: TComponent); begin inherited Create(AOwner); FOnCompare := CompareNodes; end; procedure TMyTreeView.CompareNodes(Sender:TObject; Node1, Node2: TTreeNode; Data: Integer; var Compare: Integer); begin if CaseSensitiveSort then Compare := AnsiCompareStr(Node1.Text, Node2.Text) * SortFlag else Compare := AnsiCompareText(Node1.Text, Node2.Text) * SortFlag; end; Freundliche Grüße |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Moin, Moin marabu!
Schaut gut aus, vielen Dank schon mal. Allerdings geht es damit noch nicht wirklich voran:
Kannst du noch mal kurz über meinen Fall nachdenken? Liebe Grüße aus Hamburg |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Hallo Ralph,
was die Items betrifft, so schau dir mal den Quelltext der Unit ComCtrls an. Grundsätzlich ist es guter Stil von TCustomTreeView abzuleiten. In der Ableitung legt man dann fest, welche Properties publiziert werden und welche nicht. Leitest du von TTreeView ab, dann hast du siesen Freiheitsgrad nicht mehr. Das gilt so für alle VCL-Komponenten. Das mit dem fehlenden Schlüsselwort "procedure" tut mir leid - ich lerne noch... Bei meinem Beispiel-Code habe ich alles weggelassen, was nicht direkt mit der Problem-Facette zu tun hat. Du musst dich an der Klasse TTreeView orientieren, mein Code ist zu unvollständig. Freundliche Grüße |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Moin, Moin.
Ich habe mir die guten Ratschläge von marabu zu Herzen genommen und bin ein kleines Stück weiter gekommen.
Delphi-Quellcode:
Ist das nicht eine Implementierungsmethode? Ich gehe mal davon aus, dass es so ist - leider, leider kann ich mit dem vorstehenden Hinweis von Borland "... Zugriff ... über die Eigenschaft selbst ..." nix anfangen :wall:
property OnCompare: TTVCompareEvent read FOnCompare write FOnCompare;
Ahh, ich wäre über eine weiter Hilfestellung dankbar :love: |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Hallo Ralph,
das Präfix F steht für Field oder - für Einheimische - Feld. Deine Klasse besteht aus Feldern, Methoden und Eigenschaften. Statt der Zuweisung an FOnCompare musst du an OnCompare zuweisen. Freundliche Grüße |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Hallo marabu, :cheers:
Hallo an alle "Mitleser" Es ist vollbracht! Mein kleine Ausflug in die Komponentenentwicklung ist Dank deiner Hilfe und der von shmia (Zusammenfügen der Popups) erfolgreich abgeschlossen! Hab' wieder 'ne Menge dazugelernt. Es war etwas mühsam, aber dadurch wird der Lerneffekt bestimmt gesteigert. Als Anlage füge ich das Ergebnis bei. Als nächster (und wohl vorerst letzter) Schritt soll das Komponenten-Popup noch um eine Suchfunktion erweitert werden. Tja, und wenn da irgendwo noch "Schnitzer" enthalten sind, würde ich mich natürlich über einen Hinweis freuen! PS: Die Testanwendung hat natürlich keinen praktischen Nährwert, sie demonstriert lediglich die Möglichkeiten der Layout- und Sortiermöglichkeiten des Komponenten-Popups. // edit: Attachments entfernt, da im nächsten (letzten?) Post die abschließende Version zur Verfügung gestellt wird. |
Re: TTreeView - in abgeleiteter Komponente OnCompare nutzen
Liste der Anhänge anzeigen (Anzahl: 2)
Moin, Moin,
nun habe ich in das komponenteneigene Popup auch noch eine Suchfunktion (Wildcards avail) eingebaut - damit sind alle drei Standardfunktionen (Layout, Sortieren und Suchen) die ich grundsätzlich in (m)einem TreeView zur Verfügung haben möchte, erst einmal vorhanden. Da die Komponente ohne Hilfestellung aus dem Forum zumindest nicht so schnell entstanden wäre, möchte ich abschließend den Code zur Verfügung stellen. Wie schon im vorherigen Post bemerkt: Falls sich das einer anschaut und optmierende Hinweise geben möchte, bitte gern... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz