Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.10.10 22:46 
Du kannst einfach die Variablen vergleichen.
ausblenden Delphi-Quelltext
1:
2:
if Sender = Button1 then
  ...


user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Weil man es so nicht macht oder weil es zu simple ist???
Weil es unnötig umständlich ist. Statt dass du den Wert direkt im Event übergeben bekommst, musst du ihn extra aus der Komponente auslesen...
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mi 27.10.10 18:13 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst einfach die Variablen vergleichen.
Jo, oft genug gesehen, schon gemacht, wieder vergessen :oops:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Weil man es so nicht macht oder weil es zu simple ist???
Weil es unnötig umständlich ist. Statt dass du den Wert direkt im Event übergeben bekommst, musst du ihn extra aus der Komponente auslesen...
Zu sowas, werd ich mal einen extra Thread aufmachen, weil nicht schlüssig die Antwort. Bleiben viele Fragen meinerseits offen!



Ansonsten hab ich user profile iconXion delüx Vorschlag umgesetzt mit einer zusätzlichen Variablen!
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
type
    TBtnClicked = (bcNoBtn, bcBtn1, bcBtn2);
    TGaugeButtonClickEvent = procedure (Sender: TObject; Clicked: TBtnClicked) of object;
    
    TGaugeButton = class(TCustomControl)    
  private 
    
    FBtnClick : TGaugeButtonClickEvent;
    ....
    ....
    Btn1: TButton;
    Btn2: TButton;
    .... 
    procedure SetBtnClick(Sender: TObject);
    ....

  protected
  .....
  public
  ....
  ....

  published
  ....
  ....
  property OnBtnClick: TGaugeButtonClickEvent read FBtnClick write FBtnCLick;

end;


implementation

.....
.....

constructor TGaugeButton.Create (AOwner: TComponent);
begin
    inherited Create(AOwner);
    OnClick:= SetBtnClick;
    ....
    ....
    
    Btn1:= TButton.Create(Self);
    Btn1.OnClick:= SetBtnClick;
    ....
    ....

    Btn2:= TButton.Create(Self);
    Btn2.OnClick:= SetBtnClick;
    ....
    ....
end;

procedure TGaugeButton.SetBtnClick (Sender: TObject);
begin
    if Assigned(FBtnClick) then
    begin
        if Sender = Btn1 then
           FBtnClick(Self, bcBtn1)  //<--Button1 wurde geklickt
        else
        if Sender = Btn2 then
           FBtnClick(Self, bcBtn2)  //<--Button2 wurde geklickt
        else
           FBtnClick(Self, bcNoBtn);  //<--es wurde in der Gauge geklickt
    end;
end;
Nun geh ich davon aus, das es so richtig umgesetzt ist :wink:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 31.10.10 15:30 
Hilfe meine Routine funct nicht mehr
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
type
  TBtnClicked = (bcNoBtn, bcBtn1, bcBtn2, bcPlay, bcStop);
  TGaugeButtonClickEvent = procedure (Sender: TObject; Clicked: TBtnClicked) of object;

private
        FBtnClick: TGaugeButtonClickEvent;
        .....
        procedure SetBtnClick(Sender: TObject);
published

  property OnBtnClick: TGaugeButtonClickEvent read FBtnClick write FBtnCLick;

.....
.....

procedure TGaugeButton.SetBtnClick(Sender: TObject);
begin
  if not Assigned(FBtnClick) then //Original war es mal so: if Assigned(FBtnClick) then 
  begin                           // aber da Passiert gar nichts mehr 
    if Sender = Btn1 then
      FBtnClick(Self, bcBtn1)
    else
    if Sender = Btn2 then
      FBtnClick(Self, bcBtn2)
    else
    if TSpeedButton(Sender).Name = 'BtnPLay1' then// hier akzeptiert er komischer weise nicht
    begin                                         //Sender = BtnPlay1, undefinierter Bezeichner??? 
      //if BtnPlay.Glyph.Handle=
      BtnPlay.Glyph.LoadFromResourceName(hInstance, 'Bild4');
      BtnStop.Enabled:= True;
      FBtnClick(Self, bcPlay);

    end
    else
    if TSpeedButton(Sender).Name = 'BtnStop1' then
    begin
       BtnStop.Enabled:= True;
       BtnPlay.Glyph.LoadFromResourceName(hInstance, 'Bild3');
       FBtnClick(Self, bcStop);
    end
    else
    begin
      FBtnClick(Self, bcNoBtn);
      TGaugeButton(Sender).SetFocus;
    end;
  end;
end;

Ändere ich es so, bekomme ich Fehlermeldung an allen stellen wo FBtnClick(Self, ...) steht
Zugriffsverletztung bei Adresse 00000000

Ich habe doch nur was hinzugefügt, zusätzlich 2 Buttons! Selbst wenn ich die wieder rausnehme, bleibt der Fehler!
Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 31.10.10 15:54 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  if not Assigned(FBtnClick) then //Original war es mal so: if Assigned(FBtnClick) then 
  begin                           // aber da Passiert gar nichts mehr 
    if Sender = Btn1 then
      FBtnClick(Self, bcBtn1)
    else


wenn FBtnClick nicht Assigned ist rufst Du es auf??????????

muß heißen if Assigned(FBtnClick)

Du muß die Clickroutine zuweisen, dann passiert auch etwas
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 31.10.10 16:09 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
wenn FBtnClick nicht Assigned ist rufst Du es auf??????????

muß heißen if Assigned(FBtnClick)

War ja auch so, nur da überspringt er komischerweise die Abfrage und geht gleich zum ende der Procedure???

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Du muß die Clickroutine zuweisen, dann passiert auch etwas
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
OnClick:= SetBtnClick;
....
....
Btn1.OnClick:= SetBtnClick;
Btn2.OnClick:= SetBtnClick;
BtnPlay.OnClick:= SetBtnClick;
BtnStop.OnClick:= SetBtnClick;
sind sie!
Hat ja ach alles funktioniert, nur jetzt nicht mehr!? :cry:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 31.10.10 16:18 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
War ja auch so, nur da überspringt er komischerweise die Abfrage und geht gleich zum ende der Procedure???
Dann ist FBtnClick eben gerade nicht zugewiesen. Das ist ja genau das Problem.

Das ist wie wenn du zum Fahrer sagst:
"Wenn Reifen am Wagen sind, dann fahre los."
Der fährt aber nicht los. Also sagst du einfach:
"Wenn keine Reifen am Wagen sind, dann fahre los."
Und wunderst dich, dass das Auto komische Geräusche macht. (Zugriffsverletzung) :mrgreen:
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 31.10.10 16:26 
Das war ja auch nur zum Test! :wink:
Nur erklärt es mir nicht warum plötzlich nix mehr passiert??? ergo FBtnclick bleibt nil!

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 31.10.10 16:26 
Du weist OnBtnClick nicht zu. :nixweiss:
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 31.10.10 17:05 
So noch mal neu überarbeitet, alla user profile iconXion delüx Vorschlag! anstatt V steht bei mir F . Trotzdem, nix passiert!?
Was vorher klappte, will jetzt nicht mehr. Ich finde und seh nichts wo es klemmpt :autsch:
:cry: :cry: :cry:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 31.10.10 17:25 
ist 1.) OnBtnClick ein Event im Objektinspektor zugewiesen?
2.) verwendest Du in Deinem Code nur noch VOnButtonClick und nicht noch irgendwo als Leiche FOnButtonClick

wenn ja, wirst Du Komponentensource und Testprogramm als Code hinterlegen müssen damit Dir geholfen werden kann.
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 31.10.10 17:39 
1. ist sichtbar.
2. anstatt V habe ich F genommen!
3. ich hänge mal den Code dran.
und bin gespannt wo ich Dussel nen Fehler nicht mehr sehe!
Einloggen, um Attachments anzusehen!
_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 31.10.10 17:53 
Ich musste zum testen die Resoureladerreien rausnehmen und TRoundbutton durch Button ersetzen.

Getestet mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button2Click(Sender: TObject);
begin
  With TGaugeButton.Create(self) do
    begin
      Parent := Self;
      OnBtnClick := ButtonClick;
    end;
end;


läuft ....

ich bin fast sicher daß Du im Objektinspektor OnBtnClick nicht zugewiesen hast
ALF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: So 31.10.10 19:04 
Mhh... peinlich!
Mir war so, wenn ich die pas meinem Project hinzufüge und ich sie dann mit Haltpunkte versehe, genau in der OnBtnClick routine, das ich dann zugreifen kan auf den Sender um zu sehen ob alles richtig ausgeführt wird. Das muss dann wohl ein Irrtum von mir gewesen sein!

Alles ander funct. Also im OI doppelclick auf OnBtnClick usw.

Danke noch mal

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 31.10.10 19:06 
Aller guten Dinge sind drei (also was den Hinweis darauf angeht). :D