Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Komponentenentwicklung - Änder des SelectCell-Ereignisses (https://www.delphipraxis.net/170995-komponentenentwicklung-aender-des-selectcell-ereignisses.html)

DRK11 14. Okt 2012 21:11

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:

sx2008 14. Okt 2012 21:40

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;

DRK11 14. Okt 2012 21:54

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

sx2008 14. Okt 2012 22:08

AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses
 
Zitat:

Zitat von DRK11 (Beitrag 1187024)
Aber ich möchte die komponente so entwickeln, dass sie selber auf eine typ. Datei zugreift. Die daten werden dann im Grid angezeigt.

Das Laden und Speichern der Daten ist nicht Aufgabe der TStringGrid-Komponente.
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;

DRK11 14. Okt 2012 22:17

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 11:53 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