Autor |
Beitrag |
Massiv
      
Beiträge: 93
|
Verfasst: Sa 04.04.09 18:43
Hallo
ich wusste nicht wo ich das reinschreiben sollte deshalb hier bei multimedia^^
Also ich möchte gerne EIne komponente verändern. ich möchte gerne das mein progressbar das ereigniss OnChange bekommt!
wie stell ich das an als owas fürn code muss ich wo einfügenb?
Ich bin bis jetzt so weit gekommen:
hab auf komponente/neue komponente und dann tqprogressbar als vorfahrtyp genommen!
dann erschien dies wie üblich:
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:
| unit QqProgressBarvonmir;
interface
uses SysUtils, Classes, Controls, QProgBar;
type tqProgressBarvonmir = class(TQProgressBar) private protected public published end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('UtilMind', [tqProgressBarvonmir]); end;
end. |
bitte es wäre lieb wenn mir jm helfen könnte denn ich bracuhe dringend die onchange ereigniss^^
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 18:47
Du musst die Eigenschaft Position selbst einbauen, schau dir doch einfach den Originalquelltext von TProgressBar an, dann musst du das nur kopieren.
Und im Setter kannst du dann das Ereignis OnChange auch auslösen, das du ebenfalls als Property einbauen musst.
Aber abgesehen davon: Die ProgressBar kann ihre Position nicht selbst ändern, also wofür brauchst du das Event? Du setzt die Position selbst, da kannst du auch die Behandlung auslösen, die du bei einer Änderung machen willst. Ich sehe in deinem Vorhaben mit OnChange keinerlei Sinn...
Wenn dir das zu viel Schreibarbeit ist, die eine Zeile mehr, dann schreib dir eine Prozedur SetProgressBarPosition, die die Position setzt und noch etwas anderes macht.
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: Sa 04.04.09 19:50
Ich bracihe die Onchnge ereigniss, weil ich progressbar als lautstäreknregler benutzne möchte!
und dafür bracuh ich OnChange!
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 04.04.09 19:51
Nimm doch das Ereignis onMouseDown, welches du ja eh benutzen musst und darin weißt du doch dann, auf was die ProgressBar jetzt steht.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 19:53
Du musst ja aber erst einmal programmieren, dass der Benutzer mit der Maus die ProgressBar regeln kann. Und das kannst du auch ohne eigenen Komponente per OnMouse... machen.
Natürlich kannst du das auch in einer Komponente kapseln. Aber da ist das erste Problem ja die Steuerung der Mausereignisse und das Einstellen der Position damit. Und wenn du das hast, dann ist das OnChange wohl auch kein Problem mehr. 
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: Sa 04.04.09 19:54
Warum mousedown?
ich will mit dem maus die lautstärek regeln indem ich die position vom Progressbar manuell ändere und dazu brauch ich doch Onchange
wie geht das denn mit mousedown?
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: Sa 04.04.09 19:55
jaenicke
wie kann ich das einstellen sodass der benutzer das mit mouse regeln kann?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 19:58
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 04.04.09 22:22
Liest du dir die Antworten auf deine Threads auch durch? Ich habs dir hier schon erklärt:
www.delphi-forum.de/viewtopic.php?t=91324
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: So 05.04.09 15:39
Ja das problem ich weiss den code nicht:(
Kann ich nicht einfach onChange machne und Fertig ist viel einfacjer oder?
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 05.04.09 15:48
 EINFACHER?
Vergleich:
Delphi-Quelltext 1: 2:
| ProgressBar1.Position:= NeueLautstärke; | im Vergleich zu
1: ProgressBar Code untersuchen
2: Neue Klasse von TProgressBar ableiten
3: Neues Ereigniss in den Code einfügen (Hierbei reverse engeneering durchführen, um zu verstehen, wie man Ereignisse in Delphi implementiert)
4: Reverse Engeneering um herauszufinden, wie das onChange Ereigniss dann auch im ObjectManager erscheint
5: Setter von FPosition modifizieren, so dass das onChange ausgelöst wird
6: Komponente installieren
Was ist einfacher?
Edit: Und wenn du den ganzen Kram erledigt hast, dann musst du immernoch herausfinden, wie man die ProgressBar mit der Maus steuert und hast nichts gewonnen 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: So 05.04.09 16:15
JayEff. ok hast recht
aber bitte kannst mir sagen wie man porgressbar mit der maus regelt?
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 05.04.09 16:18
Ich zitiere mich ja ungern, aber das habe ich dir bereits erklärt:
GTA-Place hat folgendes geschrieben: | Guck bei den Ereignissen, da gibt es "OnMouseDown" und dann kannst du die Pixel in Position umrechnen. |
Und solltest du dazu Fragen haben, brauchst du keinen neuen Thread aufmachen, sondern den verwenden, in dem ich dir das vorgeschlagen habe:
www.delphi-forum.de/viewtopic.php?t=91324
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 05.04.09 16:34
Massiv hat folgendes geschrieben : | aber bitte kannst mir sagen wie man porgressbar mit der maus regelt? |
Gut, obwohl GTA-Place dir schon die richtigen Stichworte genannt hat, geh ich jetzt mal einen Schritt weiter und nenn dir noch ein paar mehr
Zunächst einmal reicht das onMouseMove Event, in ihm kannst du abfragen, ob die linke Maustaste gedrückt gehalten wird, das Stichwort hierzu ist TShiftState, ein entsprechender Parameter wird dem Event übergeben.
Nun musst du nur die Pixelposition (der Parameter X ) in eine Position in der Trackbar umrechnen. Dazu hilft ein bisschen mathematisches Geschick: Teilt man die X-Position des Mauszeigers durch die Breite (Width) der Progressbar, so erhält man einen wert zwischen 0 und 1. Um diesen jetzt auf die Position der Progressbar umzurechnen, muss er mit der Maximalposition der Bar multipliziert werden. (Beachte: Vorher darfst du nicht runden! div darf nicht zum Teilen verwendet werden! ) Nun kannst du Runden und danach die Minimalposition der Bar vom Endergebniss abziehen. Diesen Schritt kannst du natürlich weglassen, wenn .Min = 0 ist.
Die Beschreibung sollte eigentlich reichen, um den Zweizeiler selbst hinzukriegen 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: Mo 06.04.09 14:58
JayEff, danke nur eine frage noch!
wie fragt man zb. ob maus geklikct wurde(onmousedown)?
ich habs so
[delphi]if onmousedown = true then .....[/delphi}]
funzt aber nicht!
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 06.04.09 16:11
Ich wiederhole mich ja nur ungern, aber JayEff hat folgendes geschrieben : | Zunächst einmal reicht das onMouseMove Event, in ihm kannst du abfragen, ob die linke Maustaste gedrückt gehalten wird, das Stichwort hierzu ist TShiftState, ein entsprechender Parameter wird dem Event übergeben. |
Da du versuchst, eine eine property vom Typ TMouseMoveEvent mit einer Konstante vom Typ Boolean zu vergleichen lege ich dir mal den Delphi Crashkurs von Christian S. ans Herz, dir fehlen ne ganze Menge Grundlagen
Aber ich werd den von mir zitierten Satz mal etwas ausführlicher Beschreiben:
TShiftState ist so deklariert: Delphi-Quelltext 1: 2:
| TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); |
Um zu prüfen, ob die Linke Maustaste gedrückt wird, nutzt du den in-Operator (Du fragst also, "ist ssLeft in Shift" ? ).
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
|