![]() |
Event innerhalb einer Klasse umleiten
Hier mein Problem,
ich möchte gern das Event "KeyPress" von dem Tedit verwenden. Ich schaffe es leider nur Events direkt vom TPanel zu erzeugen! TSC = class(TPanel) private FOnMouseEnter,FOnMouseLeave : TNotifyEvent; OrderEdit: TEdit; procedure FOrderEditKeyPress(Sender: TObject; var Key: Char); ??? |
AW: Event innerhalb einer Klasse umleiten
Ist eigentlich egal. Sind beide von TWinControl abgeleitet. Du mußt nur beim Panel die property OnKeyPress nach public oder published verschieben und zuweisen.
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TMyPanel = class(TPanel) procedure OnMyKeyPress(Sender: TObject; var Key: Char); public property OnKeyPress; constructor Create(AOwner: TComponent); override; end; TForm2 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private FPanel: TMyPanel; end; var Form2: TForm2; implementation {$R *.dfm} { TMyPanel } constructor TMyPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); OnKeyPress := OnMyKeyPress; end; procedure TMyPanel.OnMyKeyPress(Sender: TObject; var Key: Char); begin ShowMessage(''); end; procedure TForm2.FormCreate(Sender: TObject); begin FPanel:= TMyPanel.Create(Self); FPanel.Parent:= Self; FPanel.Name:= 'MyPanel1'; FPanel.Align := alClient; FPanel.Caption := 'Test'; end; procedure TForm2.FormShow(Sender: TObject); begin FPanel.SetFocus; end; end. |
AW: Event innerhalb einer Klasse umleiten
Vielen Dank für die Antwort! Mein Problem besteht aber dennoch.
type TMyPanel = class(TPanel) TmyEdit: Tedit; // HIER STEHT MEIN SORGENKIND procedure OnMyKeyPress(Sender: TObject; var Key: Char); public property OnKeyPress; constructor Create(AOwner: TComponent); override; end; Mein Tedit steht innerhalb der Komponente und ich schaffe es nicht ein Event für TmyEdit zu erzeugen! Das Edit erscheint auf dem Panel (TMyPanel) un ich möchte die Eingabe des Edit abfragen, Das ist eigentlich alles! |
AW: Event innerhalb einer Klasse umleiten
aufs mindeste beschränkt....
Delphi-Quellcode:
Anwendungsbeispiel
unit lal;
interface uses Windows, SysUtils, Variants, Classes, Graphics, Controls, ExtCtrls, StdCtrls; type TMyPanel = class(TPanel) private FmyEdit: Tedit; function GetEvent: TKeyPressEvent; procedure SetEvent(const Value: TKeyPressEvent); public constructor Create(AOwner: TComponent); override; published property OnMyKeyPress: TKeyPressEvent read GetEvent Write SetEvent; end; implementation { TMyPanel } constructor TMyPanel.Create(AOwner: TComponent); begin inherited; Width := 100; Height := 50; FmyEdit := Tedit.Create(self); FmyEdit.Parent := self; FmyEdit.Width := 50; end; function TMyPanel.GetEvent: TKeyPressEvent; begin Result := FmyEdit.OnKeyPress; end; procedure TMyPanel.SetEvent(const Value: TKeyPressEvent); begin FmyEdit.OnKeyPress := Value; end; end.
Delphi-Quellcode:
Da ich nicht sicher bin was genau Du suchst hier eine Version mit einer zusätzlichen internen Behandlung ...
implementation
uses lal; {$R *.dfm} procedure TForm4.AKeyPressEvent(Sender: TObject; var Key: Char); begin Caption := Caption + Key; end; procedure TForm4.Button1Click(Sender: TObject); begin With TMyPanel.Create(self) do begin Parent := self; OnMyKeyPress := AKeyPressEvent; end; end;
Delphi-Quellcode:
unit lal;
interface uses Windows, SysUtils, Variants, Classes, Graphics, Controls, ExtCtrls, StdCtrls; type TMyPanel = class(TPanel) private FmyEdit: Tedit; FKeyPressEvent: TKeyPressEvent; procedure AInternalKeyPressEvent(Sender: TObject; var Key: Char); public constructor Create(AOwner: TComponent); override; published property OnMyKeyPress: TKeyPressEvent read FKeyPressEvent Write FKeyPressEvent; end; implementation { TMyPanel } procedure TMyPanel.AInternalKeyPressEvent(Sender: TObject; var Key: Char); begin if Key='A' then Key := 'B'; if assigned(FKeyPressEvent) then FKeyPressEvent(Self,Key); end; constructor TMyPanel.Create(AOwner: TComponent); begin inherited; Width := 100; Height := 50; FmyEdit := Tedit.Create(self); FmyEdit.Parent := self; FmyEdit.Width := 50; FmyEdit.OnKeyPress := AInternalKeyPressEvent; end; end. |
AW: Event innerhalb einer Klasse umleiten
Tausend Dank!
Das ist die perfekte Lösung. Ich verstehe zwar noch nicht ganz warum das so funktioniert - aber es geht perfekt! Nochmals Danke - Ich werd ne Kiste Bier ausgeben wenn wir uns mal sehen sollten. |
AW: Event innerhalb einer Klasse umleiten
kein Grund für Überschwenglichkeiten :wink:, wo hängt es denn noch ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz