Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Überschreiben der Methode 'OnTitleClick' (https://www.delphipraxis.net/33504-ueberschreiben-der-methode-ontitleclick.html)

barnti 8. Nov 2004 12:54


Überschreiben der Methode 'OnTitleClick'
 
Hallo,

ich beschäftige mich erst seit kurzer Zeit mit der Komponentenentwicklung. Habe mir schon einiges angeschaut, unter anderem das Tutorial von Sakura...

Leider weiß ich nicht wie ich ein Default-Verhalten für das Ereignis 'OnTitleClick' für meine Komponente implementiere. Hier mal der Code:
Delphi-Quellcode:
unit MyDBGrid;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs;

type
  TmyDBGrid = class (TDBGRID)
  published
    function OnTitleClick: TNotifyEvent; override;
  end;
 

procedure Register;

implementation

procedure Register;
begin
end;

{
********************************** TmyDBGrid ***********************************
}
{- TmyDBGrid.OnTitleClick }
function TmyDBGrid.OnTitleClick: TNotifyEvent;
begin
  showmessage('OnTitleClick!')
end;


end.
So scheint es nicht zu funktionieren. Wenn ich in meiner Anwendung ein Grid vom Typ 'TmyDBGrid' erzeuge klappt zwar die Darstellung, das Klicken auf die Titelzeile wird aber nicht beachtet...

Weiß jemand Rat?

mirage228 8. Nov 2004 12:57

Re: Überschreiben der Methode 'OnTitleClick'
 
Hi,

deklariere die Prozedur mal so
Delphi-Quellcode:
private
  procedure TitleClicked(Sender: TObject);
und schreibe im Konstruktor dann:
Delphi-Quellcode:
constructor TMyDBGrid.Create(AOwner: TComponent);
begin
  inherited;
  OnTitleClick := TitleClicked;
end;
mfG
mirage228

shmia 8. Nov 2004 13:13

Re: Überschreiben der Methode 'OnTitleClick'
 
Dazu musst die Procedure Titleclick überschrieben werden. Die Deklaration sieht so aus:
Delphi-Quellcode:
procedure TitleClick(Column: TColumn); dynamic;
Und somit:
Delphi-Quellcode:
TMyDBGrid = class(TDBGrid)
protected // TitleClick soll auch weiterhin protected bleiben
   procedure TitleClick(Column: TColumn); override;

end;

procedure TMyDBGrid.TitleClick(Column: TColumn);
begin
   // hier mache ich mein eigenes Ding
   ....
   // und rufe dann das Standardverhalten auf
   inherited;
end;
Würde man OnTitleclick im Konstruktor setzen, würde man dem Endbenutzer dieses Event wegnehmen.

barnti 8. Nov 2004 13:32

Re: Überschreiben der Methode 'OnTitleClick'
 
Hallo shmia,

ich finde bei der Komponente TDBGrid nur das Event 'OnTitleClick'. Demnach müsste das also lauten:
Delphi-Quellcode:
procedure OnTitleClick(Column: TColumn); dynamic;
 
...

TMyDBGrid = class(TDBGrid)
protected // TitleClick soll auch weiterhin protected bleiben
   procedure OnTitleClick(Column: TColumn); override;

end;

procedure TMyDBGrid.OnTitleClick(Column: TColumn);
begin
   // hier mache ich mein eigenes Ding
   ....
   // und rufe dann das Standardverhalten auf
   inherited;
end;
Oder?

shmia 8. Nov 2004 14:00

Re: Überschreiben der Methode 'OnTitleClick'
 
Zitat:

Zitat von barnti
ich finde bei der Komponente TDBGrid nur das Event 'OnTitleClick'. Demnach müsste das also lauten:
Delphi-Quellcode:
procedure OnTitleClick(Column: TColumn); dynamic;
Oder?

Das wäre aber kein Event, sondern eine virtuelle Methode.
Ich habe meine Infos von Delphi 5 während du Delphi 7 benützt. Gut möglich, dass Borland hier was geändert hat:
Delphi-Quellcode:
// Delphi 5
procedure TCustomDBGrid.TitleClick(Column: TColumn);
begin
  if Assigned(FOnTitleClick) then FOnTitleClick(Column);
end;
// Delphi 7
procedure TCustomDBGrid.OnTitleClick(Column: TColumn);
begin
  if Assigned(FOnTitleClick) then FOnTitleClick(Column);
end;
Falls dem so ist, kannst deine Komponente mit {$IFDEF } kompatibel zu D5 und D6 machen.

barnti 8. Nov 2004 14:06

Re: Überschreiben der Methode 'OnTitleClick'
 
Hi,

ich habe beide Versionen versucht, 'OnTitleClick' und auch 'TitleClick'. Beide funktionieren nicht. Hier noch mal mein jetziger Code:
Delphi-Quellcode:
unit MyDBGrid;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs;

type
  TmyDBGrid = class (TDBGrid)
  protected
    procedure TitleClick(Column: TColumn); override;
  end;
 

procedure Register;

implementation

procedure Register;
begin
end;

{
********************************** TmyDBGrid ***********************************
}
{- TmyDBGrid.TitleClick }
procedure TmyDBGrid.TitleClick(Column: TColumn);
begin
  showmessage('OnTitleClick!')
  inherited;
end;


end.
Klicke ich im laufenden Programm auf den Titel meines erzeugten Grids passiert nichts...

barnti 9. Nov 2004 07:12

Re: Überschreiben der Methode 'OnTitleClick'
 
Hallo,

ich habe den Fehler gefunden. Ich hatte vor einiger Zeit schon einmal eine Komponente mit dem gleichen Namen erzeugt. Dadurch habe ich immer auf eine falsche Unit zugegriffen...
Nachdem ich alle Dateien gelöscht habe und die aktuelle neu erzeugt habe, funktioniert alles.
Danke euch trotzdem vielmals!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 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