AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Klasse von TForm ableiten - Events

Ein Thema von NetSonic · begonnen am 24. Mai 2011 · letzter Beitrag vom 24. Mai 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#11

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 11:49
In der IDE, genauer gesagt im OI, klickt man z.b. doppelt auf ein Event und Delphi weist es zu.

Ob es nun "manuell" im Code oder automatisch über die DFM zugewiesen wurde, ist dabei egal ... aber irgendwo muß die Methode zugewiesen sein, denn sonst weiß Delphi ja nicht was es dort was machen soll.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 11:51
Richtig, das ist ja der Sinn von Events: man kann bei definierten Ereignissen eingreifen. Wenn man das gar nicht beabsichtigt, kann man ja auch stumpf irgendeine fixe Methode aufrufen oder dergleichen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#13

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 11:54
Wieso musst Du OnShow nichts zuweisen? Wenn Du im Objektinspektor nichts im OnShow einträgst, dann wird das Event ja auch nicht gefeuert.
Sorry, Du hast natürlich recht. Hatte mich da falsch ausgedrückt.
Aber wie ist es dann jetzt möglich, dem Event eine Methode innerhalb von Form1 zuzuweisen? Ich möchte "Wuppdi" nicht auf frmMain nutzen, sondern innerhalb des Formular, welches auf TMyForm basiert... Wie muss ich das anstellen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#14

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 11:58
Du kannst dem Event doch jede kompatible Methode zuweisen, egal welchem Objekt sie gehört. Soll das aber immer dieselbe aus Deinem TMyForm sein, dann brauchst Du auch kein Event wie bereits erwähnt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#15

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 12:04
Jede abgeleitete Form soll aber anders auf SetMyParams reagieren. Und die folgende Zuweisung wird mir mit dem Fehler "Inkompatible Typen: TObject und string" vom Compiler quittiert:

Delphi-Quellcode:
Form1.MyEvent := Form1.MyEvent;
Form1.Color := clRed;
Form1.SetMyParams('TEST');
Delphi-Quellcode:
procedure TForm1.MyEvent(sAction: String);
begin
     MessageDlg(sAction, mtWarning, [mbOK], 0);
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#16

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 12:06
Wenn Du schon selbst nicht mehr weißt, wie Du die Methode deklariert hast:
procedure TForm1.MyEvent(Sender: TObject; sAction: String); //Sender-Parameter muss dazu [edit] Ich habe mal schnell ein Beispiel gebaut:
Delphi-Quellcode:
type

  TOnRenameEvent = procedure(Sender: TObject; NewName: string) of object;

  THund = class
  private
    FName: string;
    FOnRename: TOnRenameEvent;
    procedure SetName(const Value: string);
  public
    constructor Create;
    procedure ShowNewName(Sender: TObject; NewName: string);
    property Name: string read FName write SetName;
    property OnRename: TOnRenameEvent read FOnRename write FOnRename;
  end;

constructor THund.Create;
begin
  inherited;
  FName := 'Bello';
end;

procedure THund.SetName(const Value: string);
begin
  if Value <> FName then
    begin
      FName := Value;
      if Assigned(FOnRename) then
        FOnRename(self, FName);
    end;
end;

procedure THund.ShowNewName(Sender: TObject; NewName: string);
begin
  ShowMessage('Ich heiße jetzt ' + NewName);
end;

procedure TFormTest.btnNewDogClick(Sender: TObject);
var
  Hund: THund;
begin
  Hund := THund.Create;
  try
    Hund.OnRename := Hund.ShowNewName;
    ShowMessage(Hund.Name); //Bello
    Hund.Name := 'Hasso';
  finally
    Hund.Free;
  end;
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (24. Mai 2011 um 12:12 Uhr)
  Mit Zitat antworten Zitat
NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#17

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 13:23
Danke DeddyH - Dein Beispiel hat in meinem Kopf wieder für Klarheit gesorgt. Wie man gesehen hat, habe ich ja selbst die Deklaration meiner Methode verdrängt...

Ich habe mich jetzt an Deinem Beispiel orientiert und entsprechend meiner Anforderungen angepasst. Zusätzlich habe ich die "ShowNewName" als Virtual deklariert, um bei jedem abgeleiteten Formular mit override entsprechend individuelle Varianten nutzen zu können.

Vielen Dank nochmal für die Geduld und die tolle Hilfestellung.
Manchmal hat man dann doch ein Kantholz vor dem Kopf...

NetSonic
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#18

AW: Eigene Klasse von TForm ableiten - Events

  Alt 24. Mai 2011, 13:31
Schön, dass es jetzt "Klick" gemacht hat. Aber um das noch einmal klarzustellen: Events machen nur dann Sinn, wenn sie eine Schnittstelle zur "Außenwelt" darstellen. Geht es nur um Vererbung, dann reichen ja auch virtuelle Methoden (ggf. sogar abstrakte in der Basisklasse).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:32 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