![]() |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
Wie wärs damit:
Delphi-Quellcode:
type
TDigitLedMouseDownEvent = procedure(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); TDigitLed = class(TPaintBox) private ... protected { Protected declarations } ... FOnMouseDown : TDigitLedMouseDownEvent; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; public { Public declarations } ... published { Published declarations } ... property OnMouseDown : TDigitLedMouseDownEvent read FOnMouseDown write FOnMouseDown; end; procedure Register; implementation {$R DIGITLED.DCR} procedure Register; begin RegisterComponents('MoonRed', [TDigitLed]); end; ... procedure TDigitLed.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; If Assigned(FOnMouseDown) then FOnMouseDown(Button, Shift, X, Y); end; |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
muss ich die procedure also erst "starten"?
werde das gleich mal testen!!! danke, nils |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
jetzt habe ich aber bei folgender zeile
Delphi-Quellcode:
folgende fehlermeldung:
property OnMouseDown : TLedGroupMouseDownEvent read FOnMouseDown write FOnMouseDown;
Code:
kannst du mir weiterhelfen?
[Error] Ledgroup.pas(56): Published property 'OnMouseDown' cannot be of type PROCEDURE
gruss, iaby |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
thread.bringtotop;
|
Re: Hinzufügen von neuen Ereignissen zu Komponenten
|
Re: Hinzufügen von neuen Ereignissen zu Komponenten
Sorry, war auch mein Fehler.
Das Event muss so aussehen:
Delphi-Quellcode:
Und der Aufruf in der MouseDown function so:
type
TDigitLedMouseDownEvent = procedure(Sender : TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;
Delphi-Quellcode:
procedure TDigitLed.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin inherited; If Assigned(FOnMouseDown) then FOnMouseDown(self, Button, Shift, X, Y); end; |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
Liste der Anhänge anzeigen (Anzahl: 1)
also es geht immer noch nicht!
es wird zwar kompiliert, aber die onmousedown prozedur wird einfach nie "betreten" ich hab jetzt mal die komponente (die modifizierte) in den anhang gepackt. in dem zustand in dem sie jetzt ist, sollte sie eigentlich funktionieren! wenn ihr also mal lust&zeit habt könntet ihr sie euch ja mal anschauen gruss, iaby PS: es geht um die TLedGroup komponente, nich um die andere! |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
Ich werde die mir mal anschauen, weil ich ein ähnliches Problem habe:
Eine Image-Komponente, abgeleitet von TImage, soll OnKeyDown/Up usw. Ereignisse bekommen. Bin bisher nicht sehr weit gekommen: ;-)
Delphi-Quellcode:
unit Sli;
interface uses SysUtils, Classes, Controls, ExtCtrls; type TSli = class(TImage) private { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TSli]); end; end. |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
OK, jetzt habe ich auch ein KeyDownEvent, aber es funktioniert nicht alleine, da ich das Image ja nicht 'markieren' kann.
Wie kriege ich das aktiv, damit bei einem Tastendruck meine KeyDown Pozedure aufgerufen wird?
Delphi-Quellcode:
unit Sli; { StringListImage Grafische Ausgabe einer Stringlist (eine Art bessere Listbox) type TSliKeyDownEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object; type TSliEnterEvent = procedure (Sender: TObject) of object; type TSli = class(TImage) private { Private-Deklarationen } protected { Protected-Deklarationen } FOnkeyDown: TSliKeyDownEvent; FOnEnter: TSliEnterEvent; procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Enter(Sender: TObject) ; public { Public-Deklarationen } constructor Create(AOwner:TImage); published { Published-Deklarationen } property OnKeyDown : TSliKeyDownEvent read FOnKeyDown write FOnKeyDown; property OnEnter : TSliEnterEvent read FOnEnter write FOnEnter; end; procedure Register; implementation ... procedure TSli.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; If Assigned(FOnKeyDown) then FOnKeyDown(self, Key, Shift); end; procedure TSli.Enter(Sender: TObject); begin inherited; If Assigned(FOnEnter) then FOnEnter(self); end; Meine OnEnterEvent - Vererbungsversuche (von einer Listbox halt abgeschaut) bringen mich nicht weiter. |
Re: Hinzufügen von neuen Ereignissen zu Komponenten
Zitat:
Delphi-Quellcode:
TLedGroup = class(TCustomGroupBox)
private ... FOnMouseDown: TMouseEvent; ... protected procedure SetOnMouseDown(Value: TMouseEvent); public ... published ... property OnMouseDown read FOnMouseDown write SetOnMouseDown; end; ... procedure TLedGroup.CreateDigits; var f:byte; aux: TComponent; begin for f:=1 to FMaxDigits do begin aux:=FindComponent('Led'+IntToStr(f)); if (aux=nil) then // if the led number does not exists begin //creates the led Led:=TDigitled.Create(self); Led.Name:='Led'+IntToStr(f); led.top:=Margin; led.width:=Round((Width-Margin) / FMaxDigits); led.left:=(f-1)*(Round((Width-Margin-Margin) / FMaxDigits))+Margin; led.height:=height-(Margin+Margin); led.OnMouseDown := FOnMouseDown; // <--- Hier noch allen DigitLeds das OnMouseDown zuweisen!!! InsertControl(Led); end; end; end; // Allen DigitLeds das OnMouseDown zuweisen!!! procedure TLedGroup.SetOnMouseDown(Value: TMouseEvent); var f:byte; aux: TComponent; begin FOnMouseDown := Value; for f:=1 to FMaxDigits do begin aux:=FindComponent('Led'+IntToStr(f)); (aux as TDigitLed).OnMouseDown := OnMouseDown; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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-2025 by Thomas Breitkreuz