Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TAction in TComponent einbauen


patmann2001 - Mi 16.11.11 14:19
Titel: TAction in TComponent einbauen
Hallo,
ich habe einen Button von TCustomControl abgeleitet. Da ich in diesem Btn das Zeichnen selber mache, kann ich meine Caption nicht von TCaption ableiten. Deshalb habe ich das selber gemacht. Wenn ich nun die Eigenschaft Action ableite, dann ändert sich natürlich meine Caption nicht. Das möchte ich aber. Was muss ich machen, damit sich speziell diese Eigenschaft ändert, bzw. wie kann ich auf ActionChange zugreifen.
Vielen Dank für eure Hilfe.
lg Patmann


bummi - Mi 16.11.11 16:08


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  TMyControl=CLass(TCustomControl)
  private
    Flabel:TLabel;
  protected
     procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
  public
     Constructor Create(AOwner:TComponent);Override;
  End;

{ TMyControl }

procedure TMyControl.ActionChange(Sender: TObject; CheckDefaults: Boolean);
begin
  inherited;
  FLabel.Caption := Caption;
end;


patmann2001 - Mi 16.11.11 17:13

Hallo,

das hilft schon mal, das beim Zuweisen der Action die Caption gesetzt wird, jedoch wenn die Caption geändert wird, durchläuft das Programm diese Routine nicht mehr.
Da fehlt noch was.

Lg Patmann


bummi - Mi 16.11.11 22:39

Dann häng' Dich in die Messages ich würde mal bei WM_SETTEXT anfangen ....


patmann2001 - Do 17.11.11 16:27

Hallo,

es hat etwas mit der Function GetActionLinkClass zu tun. Ein normaler Button wird dann von der Classe TControlActionLinkClass abgeleitet. Mein Button ist aber eine eigene Klasse und ich musste daher diese Classe neu ableiten. Soweit so gut. Wenn ich den Button jetzt zur Laufzeit erzeuge, gibt es auch keine Fehlermeldung und die Action arbeitet einwandfrei. Wenn ich nun jedoch den Button in der Entwicklungsumgebung auf das Formular lege erhalte ich die Fehlermeldung:
Zitat:

Fehler
Zugriffsverletzung bei Adresse 005C436D in Modul 'coreide60.bpl'. Lesen von Adresse 00000006.

Gibt es da eine Möglichkeit, die Entwicklungsumgebung zu debuggen? Wie komme ich an den Fehler ran.
Lg Patmann.