Autor |
Beitrag |
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 21.10.10 20:01
Funktion zum Packen in den Objektinspektor:
delphi.about.com hat folgendes geschrieben: | RegisterComponents( [ComponentClass], 'Tab name'); |
ACHTUNG: Vorher informieren, was das bewirkt *keine Ahnung von hat*
//Edit: verdammter LoadBalancer...haut mich raus während ich im inline-Editor wurstel. Deswegen der Doppelpost (war wohl mein Fehler nach dem Durcheinander)
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
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: Do 21.10.10 20:10
Xion hat folgendes geschrieben : | ACHTUNG: Vorher informieren, was das bewirkt *keine Ahnung von hat* |
Das gehört in die Prozedur Register. Die wird beim Laden des Packages dann ausgeführt. Und da ich die Eigenschaften published gemacht habe, sind die dann auch im OI sichtbar.
Allerdings halte ich davon nicht so viel, deshalb habe ich es nicht hinzugefügt. Ich finde es sehr viel einfacher neue Komponenten einfach manuell zu erstellen. Dann kann jeder das Projekt einfach laden und kompilieren.
Ich hasse es, wenn ich für ein Projekt erst eine halbe Stunde Komponenten installieren darf... 
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Do 21.10.10 20:10
Xion hat folgendes geschrieben : | ACHTUNG: Vorher informieren, was das bewirkt *keine Ahnung von hat* |
Das sollte der Komponentenwizard eig. automatisch erzeugen. Zumindest war das bei Delphi 7 so. Und das hat was mit der Palette, nicht mit dem OI zu tun. Was da rein soll, musst doch in published als property deklarieren.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 21.10.10 20:19
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Fr 22.10.10 19:55
Ich melde mich mal kurz, das ich noch am Ball bin. Leider bin ich beruflich stark gebunden und kann alle eure Info und Meinungen noch nicht in Ruhe abarbeiten.
Richtig ist, es geht mir nur darum ob es möglich ist, eine neue Komponente zu erstellen die zwei unterschiedliche Komponenten beeinhaltet und dabei all ihre flexibilität behalten.
Habt ihr mir ja schon aufgezeigt
Leider bin ich ein Typ, der es lieber so hat, das man die neue Komponente auf die Form packen kann, um sie sich anzuschauen, dan zu sehen was ich alles mit ihr machen kann bzw was mir der OI alles für Möglichkeiten bietet.(Also sie dynamisch zu erstellen um sie dann dynamisch einzubinden ist nicht so mein ding) Dabei geht es mir auch nicht darum eine Komponente zu regestrieren, sondern sie in die Pallete mit aufzunehmen.(Wie das funktioniert ist ja bekannt)
Habt also Nachsicht, das ich noch keine Rückmeldung, wie weit ich mit euren Hinweisen gekommen bin abgeben kann.
Fragen meinerseit, werden auf alle Fälle folgen
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: Mo 25.10.10 15:00
So nun habe ich meine Komponenete mal erstellt.
Buttons sind drauf, lassen sich in grösse verändern, Caption kann geschrieben werden, Font kann extra eingestellt werden!(Leider wird die Font Änderung nicht automatisch aktuallisiert sondern erst beim Schreiben von Caption bzw wenn sich an der Gauge was ändert)
Was nun wichtig währe, ist das Oncklickereignis von den Buttons. Mein Versuch:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Btn1.OnClick:= SetBtnClick; Btn2.OnClick:= SetBtnClick; .... .... procedure TGaugeButton.SetBtnClick(Sender: TObject); begin FBtnClick:= TButton(Sender).Name; end; | es in etwa so umzusetzen, .... naja nix sag dazu.
Ich gehe mal davon aus was jaenicke gesagt hat, ohne Handle keine Antwort, trifft in diesem Fall zu und ich kann es also so nicht umsetzen
Was natürlich das einfachste währe. Es sei, es hat noch jemand eine Idee!!
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 25.10.10 15:29
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
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: Mo 25.10.10 15:31
Du kannst auch einfach eine Property einführen OnButton1Click oder so, deren Setter dann die Property bei Button1 setzt und deren Getter die wieder dort ausliest. 
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 25.10.10 16:58
mh.. der erste Vorschlag will nicht funcen. Irgenwas mache ich Falsch
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:
| unit GaugeButton;
interface
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, StdCtrls, StrUtils, Gauges;
type TGaugeKind = (gkHorizontalBar, gkVerticalBar); TGaugeButton = class(TCustomControl)
private FBtnClick: TObject; .... .... protected .... public .... procedure SetBtnClick(Sender: TObject); published ... end;
implementation
.... ....
constructor TGaugeButton.Create (AOwner: TComponent); begin inherited Create(AOwner); ... ... FBtnFont:= TFont.Create; Btn1:= TButton.Create(Self); Btn1.Parent:= Self; Btn1.Name:= 'Btn1'; Btn1.OnClick:= SetBtnClick; Btn1.Font:= FBtnFont; .... .... end;
procedure TGaugeButton.SetBtnClick(Sender: TObject); begin if Assigned(FBtnClick) then FBtnClick:= (Sender);
end; | ich sehe zwar zur Laufzeit SetBtnClick aber auslesen wie oben gezeigt ????
Die anderen Vorschläge sind auch nicht ohne  aber wenn ich das eine nicht mal packe, wie soll es bei den anderen gehen
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: Mo 25.10.10 17:21
Ich schreibe gleich zu Hause ein Beispiel dazu...
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 25.10.10 17:33
neeeee!!! alles zurück Ein grosser Denkfehler von mir
Die einzelnen buttons müssen zur Laufzeit so erkannt werden z.B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| TForm1.GaugeButton1Click(Sender: TObjekt); begin If TGaugeButton(Sender).Name = 'ButtonGauge1' then begin if FBtnClick = ??? then else end else If TGaugeButton(Sender).Name = 'ButtonGauge2' then begin if FBtnClick = ??? then else end
end; | Alles ander hätte ja keinen Sinn und müsste sehr kompliziert ausgelesenen und verglichen werden!
Da ich ja wissen muss von welcher Gauge der zusätzlich Button geklickt wurde.
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 25.10.10 18:02
Du machst das irgendwie komisch...FBtnClick ist ja ein TObject
Wie genau kommst du denn in deinem Code in Form1 an FBtnClick?? Ist das ne globale Variable?
Guck dir am besten nochmal das Beispiel von Seite 1 von mir an:
Xion hat folgendes geschrieben : |
Delphi-Quelltext 1:
| type TOnBtnClickEvent= procedure (GaugeMax, GaugeMin, GaugePos: integer) of object; | |
Dort kannst du natürlich statt GaugeMax usw. auch den Button angeben (als Nummer oder Boolean oder wie oben mit TWelcherButtonWurdeGeklickt )
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 25.10.10 18:25
Irgendwie will das alles nicht.
Ich muss doch die zusätzlichen Button, in diesem Fall Btn1 + Btn2 ihr Oncklickergeignis neu zuweisen. Inerhalb meiner neuen Komponente. Die Komponente befindet sich in der Delphi Palette!
Mit dieser Zuweisung muss aber auch zur Laufzeit gearbeitet werden. Das heist, klick ich Btn1 an, muss ich als Rückmeldung die Info abfragen können aus welcher Gauge welcher zusätzliche Button geklickt wurde.
Ich bekomme aber nicht mal ne Info, ob der extra Button überhaupt geklickt wurde
FBtnClick ist ein Fehler, soll setBtnClick sein.
Edit: Habs geschafft
Ist vielleicht nicht die beste Lösung aber sie funct
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public property BtnClick: String read FBtnClick;
procedure TGaugeButton.SetBtnClick(Sender: TObject); begin if TButton(sender).Name = 'Btn1' then FBtnClick:= 'Btn1' else FBtnClick:= 'Btn2';
onclick(self); end; |
Thx an alle für die Ausdauer mit mir
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 25.10.10 22:40
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:
| type TButtonClicked = (btButton1, btButton2);
type TGaugeButtonClickEvent=procedure (Sender: TObject; Clicked: TButtonClicked) of object;
type TGaugeButton=class private VOnButtonClick : TGaugeButtonClickEvent; procedure ButtonClick(Sender: TObject); public property OnButtonClick: TGaugeButtonClickEvent read VOnButtonClick write VOnButtonCLick; end;
constructor TGaugeButton.Create(...); begin Btn1.OnClick:=ButtonClick; Btn2.OnClick:=ButtonClick; end;
procedure TGaugeButton.ButtonClick (Sender: TObject); begin if Assigned( VOnButtonClick) then begin if Sender=Btn1 then VOnButtonClick( Self, btButton1 ) else if Sender=Btn2 then VOnButtonClick( Self, btButton2 ); end; end;
|
Benutzung 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:
| type TForm1=class procedure GaugeButtonClick( Sender: TObject; Clicked: TButtonClicked);
GaugeButton1.OnButtonClick:= GaugeButtonClick; GaugeButton2.OnButtonClick:= GaugeButtonClick;
procedure TForm1.GaugeButtonClick (Sender: TObject; Clicked: TButtonClicked); begin if Sender = GaugeButton1 then begin if Clicked=btButton1 then ShowMessage('Gauge1 - Button1 clicked') else if Clicked=btButton2 then ShowMessage('Gauge1 - Button2 clicked'); end else if Sender = GaugeButton2 then begin if Clicked=btButton1 then ShowMessage('Gauge2 - Button1 clicked') else if Clicked=btButton2 then ShowMessage('Gauge2 - Button2 clicked'); end; end; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Für diesen Beitrag haben gedankt: ALF
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 25.10.10 23:09
Jo, schau ich mir an!
Gibt aber dennoch ein Problem bei meiner Variante
Vielleicht auch bei euren, weiss ich noch nicht!
Klicke ich nun einen extra Button, wird die Variable BtnClick gesetzt und das onclick von der Gauge wird aufgrufen.
Wenn ich nur auf die Gauge klicke, bleibt die Variable BtnClick bestehen, sie muss aber dann leer sein!!
Wie nun, daran hab ich nicht gedacht  was wie nun
EDIT:
@Xion, hab ich übernommen ist natürlich sauberer als meins, aber.... ganau das gleiche Problem, wenn ich nun nur auf die Gauge klicke, muss ich also das OnClick auch noch aufrufen!
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: Di 26.10.10 05:28
ALF hat folgendes geschrieben : | @Xion, hab ich übernommen ist natürlich sauberer als meins, aber.... ganau das gleiche Problem, wenn ich nun nur auf die Gauge klicke, muss ich also das OnClick auch noch aufrufen |
Ja, wenn du das willst, klar. Geht ja genauso.
Für diesen Beitrag haben gedankt: ALF
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 26.10.10 08:15
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Für diesen Beitrag haben gedankt: ALF
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 26.10.10 16:45
Ok, ich hab mir mal erlaubt meine Variante einzusetzen, sagen wir mal so, bin zufrieden
Ob mann es nun so simpel machen kann, mhhh..., oder doch lieber Profesionel entzieht sich mir, da ja beides funct.
Es sei den, bei mir befinden sich unsauberer Code, der evtl das Prog oder Systhem stört oder anderes?
Hab mal nen kleines Demo und die GaugeButton.pas zum anschauen angehängt. Sollte ich da wirklich schlecht gecodet haben(GaugeButton.pas), dann werd ich selbstverständlich das abändern
Anbei: Der grösste Teil kommt von der original Gauge.pas aus Delphi
Ne Info, ob ich es so lassen kann, währe nicht schlecht.
Gruss ALf
Einloggen, um Attachments anzusehen!
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 26.10.10 17:23
Also nach 15min rumwursteln läufts jetzt erstmal  Ich habs ja nicht installiert, musste also erst die dfm lesen und...
1. Funktioniert: ja (scheint zumindest so)
2. Wie ich schon sagte finde ich es sinnlos die Gauge (inbesondre das .Paint) neu zu programmieren...stattdessen von TGauge erben oder Gauge delegieren (d.h. als Instanz wie analog zu den Buttons).
3. Die BtnClick-property find ich immernoch...ungewöhnlich  Die damit verbundenen Stringvergleiche find ich aber unschön, weil die CaseSensitive sind, was heißt, du schreibst if 'btn1' ... else ... Dabei ist der ButtonName aber 'Btn1'. Passiert sehr schnell mal und man findet den Fehler nicht.
Edit:
Du hättest die "Danke" ja auch an Postings von uns machen können, die besonders konstruktiv waren  Besonders den Einzeiler von jaenicke find ich da irgendwie...amüsant.  Aber Danke fürs Danke 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ALF 
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 26.10.10 22:42
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
|