AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Hinzufügen von neuen Ereignissen zu Komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

Hinzufügen von neuen Ereignissen zu Komponenten

Ein Thema von DelphiUser7 · begonnen am 24. Okt 2003 · letzter Beitrag vom 2. Jul 2004
Antwort Antwort
Seite 3 von 4     123 4      
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#21

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 1. Nov 2003, 19:17
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;
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#22

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 2. Nov 2003, 11:42
muss ich die procedure also erst "starten"?
werde das gleich mal testen!!!

danke, nils
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#23

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 2. Nov 2003, 12:09
jetzt habe ich aber bei folgender zeile    property OnMouseDown : TLedGroupMouseDownEvent read FOnMouseDown write FOnMouseDown; folgende fehlermeldung:
Code:
[Error] Ledgroup.pas(56): Published property 'OnMouseDown' cannot be of type PROCEDURE
kannst du mir weiterhelfen?

gruss,
iaby
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#24

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 9. Nov 2003, 12:49
thread.bringtotop;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 9. Nov 2003, 13:57
Moin iaby,

guckst Du hier:

prozedur aufruf und sender
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#26

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 9. Nov 2003, 14:26
Sorry, war auch mein Fehler.
Das Event muss so aussehen:

Delphi-Quellcode:
type
  TDigitLedMouseDownEvent = procedure(Sender : TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer) of object;
Und der Aufruf in der MouseDown function so:
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;
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#27

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 11. Nov 2003, 19:39
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!
Angehängte Dateien
Dateityp: zip led.zip (20,7 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#28

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 1. Jul 2004, 19:54
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.
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#29

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 1. Jul 2004, 20:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#30

Re: Hinzufügen von neuen Ereignissen zu Komponenten

  Alt 2. Jul 2004, 09:30
Zitat von iaby:
also es geht immer noch nicht!
es wird zwar kompiliert, aber die onmousedown prozedur wird einfach nie "betreten"
Tja, woran das wohl liegt??? Vielleicht daran, dass auch die GroupBox überhaupt nix davon mitbekommt, wenn ein TDigitLed auf ihr angeklickt wird??? Also:

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;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 18:43 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