![]() |
Komponentenentwicklung - Änder des SelectCell-Ereignisses
Hallöchen,
ich habe ja schon einige kleine Komponenten für Delphi geschrieben, aber irgendwie komme ich hier nicht weiter. Ich möchter dem SelectCell-Ereigniss einen neuen Parameter übergeben. Sieht jetzt so aus: procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); soll aber demnächst so aussehen: procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean; Kunde: TKunde); Wie muss ich da vorgehen. Wie bekomme ich die überschrieben? :wall::wall: |
AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses
So funktioniert das nicht.
Du kannst nicht einfach ein Event einer Komponente mal eben so abändern. Man sollte sich Komponenten wie Legosteine vorstellen - allgemeine Bausteine um daraus Anwendungen aufzubauen. Wenn Komponenten aber verändert werden und damit direkt mit Code in deiner Anwendung in Verbindung stehen (Klasse TKunde) dann muss man die Komponente als "vermurkst" betrachten. Also: Komponenten sind allgemeine Bausteine die so bleiben sollten wie sie sind, während das Formular den Klebstoff zu der Anwendunglogik darstellt. Man muss bei Komponenten auch zwischen der Klasse und den Objekten unterscheiden: Es ist ziemlich aufwändig neue Komponenten-Klassen zu entwickeln. Die Komponenten-Objekte können dagegen sehr leicht über Properties auf ihre jeweilige Aufgabe eingestellt werden. Je weiter der Programmierer einer Komponenten-Klasse vorrausgedacht hat um so flexibler sind die Komponenten-Objekte einsetzbar. Glücklicherweise kann jede Zelle eines Stringsgrids neben dem Text zusätzlich ein Objekt enthalten:
Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
var sg : TStringGrid; kunde : TKunde; begin sg := Sender as TStringGrid; kunde := sg.Objects[ACol, ARow] as TKunde; if Assigned(kunde) then ShowMessage(kunde.Strasse + ','+kunde.PLZ+' '+kunde.Ort); end; |
AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses
Erstmal danke für die Antwort.
Ja, da hast du recht. Aber ich möchte die komponente so entwickeln, dass sie selber auf eine typ. Datei zugreift. Die daten werden dann im Grid angezeigt. Beim Drücken auf die Zeile soll das ein das Ereigniss ausgelöst werden in dem die Daten in tKunden gelegt und übergeben wird. Also so ein bischen wie eine Datenbank-Tabelle. Dirk |
AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses
Zitat:
Aber du kannst Dir einfach eine eigene Klasse programmieren, die diesen Job übernimmt:
Delphi-Quellcode:
TKunde2Grid = class(TObject)
pivate FGrid : TStringGrid; procedure SetupFixedCells; // Überschriften in Stringgrid schreiben procedure SetGrid(Value:TStringGrid); public procedure LoadFromFile(const filename:string); procedure SaveToFile(const filename:string); procedure Clear; // Alles löschen (aber Überschriften stehen lassen) property Grid:TStringGrid read FGrid write SetGrid; // evtl. könnte diese Klasse, den zuletzt angeklickten Kunden bereitstellen property SelectedKunde:TKunde read GetSelectedKunde; end; |
AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses
hmmm
muss ich mir morgen mal durch den Kopf gehen lassen. Vieleicht ist diese Lösung ja bessen. Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 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