AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Komponentenentwicklung - Änder des SelectCell-Ereignisses
Thema durchsuchen
Ansicht
Themen-Optionen

Komponentenentwicklung - Änder des SelectCell-Ereignisses

Ein Thema von DRK11 · begonnen am 14. Okt 2012 · letzter Beitrag vom 14. Okt 2012
Antwort Antwort
DRK11

Registriert seit: 25. Mai 2007
7 Beiträge
 
#1

Komponentenentwicklung - Änder des SelectCell-Ereignisses

  Alt 14. Okt 2012, 22:11
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?

  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses

  Alt 14. Okt 2012, 22:40
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;
  Mit Zitat antworten Zitat
DRK11

Registriert seit: 25. Mai 2007
7 Beiträge
 
#3

AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses

  Alt 14. Okt 2012, 22:54
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses

  Alt 14. Okt 2012, 23:08
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;
  Mit Zitat antworten Zitat
DRK11

Registriert seit: 25. Mai 2007
7 Beiträge
 
#5

AW: Komponentenentwicklung - Änder des SelectCell-Ereignisses

  Alt 14. Okt 2012, 23:17
hmmm

muss ich mir morgen mal durch den Kopf gehen lassen.
Vieleicht ist diese Lösung ja bessen.

Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 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