Autor Beitrag
Massiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: 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:
ausblenden 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
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Sa 04.04.09 19:55 
jaenicke
wie kann ich das einstellen sodass der benutzer das mit mouse regeln kann?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 04.04.09 19:58 
user profile iconMassiv hat folgendes geschrieben Zum zitierten Posting springen:
ich will mit dem maus die lautstärek regeln indem ich die position vom Progressbar manuell ändere und dazu brauch ich doch Onchange
Wenn du sie manuell per Code änderst, dann brauchst du doch kein OnChange, dann setzt du sie doch selbst und kannst an der Stelle auch machen was bei OnChange passieren soll, wie gesagt.

user profile iconMassiv hat folgendes geschrieben Zum zitierten Posting springen:
jaenicke
wie kann ich das einstellen sodass der benutzer das mit mouse regeln kann?
Naja, du musst das schon selbst basteln. Wenn der Benutzer auf die Komponente klickt (OnMouseDown und ggf. OnClick), wenn er klickt und dann festhält und zieht (OnMouseDown, OnMouseMove, OnMouseUp), ...
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 05.04.09 15:48 
:shock: EINFACHER?
Vergleich:
ausblenden Delphi-Quelltext
1:
2:
{ereigniss bei dem sich die Lautstärke ändert}
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 :zustimm:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Massiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: So 05.04.09 16:15 
JayEff. ok hast recht
aber bitte kannst mir sagen wie man porgressbar mit der maus regelt?
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 05.04.09 16:18 
Ich zitiere mich ja ungern, aber das habe ich dir bereits erklärt:

user profile iconGTA-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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 05.04.09 16:34 
user profile iconMassiv hat folgendes geschrieben Zum zitierten Posting springen:
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 :roll:
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 :zustimm:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Massiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 06.04.09 16:11 
Ich wiederhole mich ja nur ungern, aber
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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" ? ).

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.