Autor |
Beitrag |
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 26.10.10 22:46
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mi 27.10.10 18:13
jaenicke hat folgendes geschrieben : | Du kannst einfach die Variablen vergleichen. |
Jo, oft genug gesehen, schon gemacht, wieder vergessen
jaenicke hat folgendes geschrieben : | ALF hat folgendes geschrieben : | 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 Xion delüx Vorschlag umgesetzt mit einer zusätzlichen Variablen!
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) else if Sender = Btn2 then FBtnClick(Self, bcBtn2) else FBtnClick(Self, bcNoBtn); end; end; | Nun geh ich davon aus, das es so richtig umgesetzt ist
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 31.10.10 15:30
Hilfe meine Routine funct nicht mehr
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 begin if Sender = Btn1 then FBtnClick(Self, bcBtn1) else if Sender = Btn2 then FBtnClick(Self, bcBtn2) else if TSpeedButton(Sender).Name = 'BtnPLay1' then begin 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 31.10.10 15:54
Delphi-Quelltext 1: 2: 3: 4: 5:
| if not Assigned(FBtnClick) then begin 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 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 31.10.10 16:09
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 31.10.10 16:18
ALF hat folgendes geschrieben : | 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) 
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 31.10.10 16:26
Das war ja auch nur zum Test!
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 31.10.10 16:26
Du weist OnBtnClick nicht zu. 
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 31.10.10 17:05
So noch mal neu überarbeitet, alla Xion 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
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 31.10.10 17:53
Ich musste zum testen die Resoureladerreien rausnehmen und TRoundbutton durch Button ersetzen.
Getestet mit
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 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 31.10.10 19:06
Aller guten Dinge sind drei (also was den Hinweis darauf angeht). 
|
|
|