Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Trackbar beim Loslassen Event?


stigge - Do 22.03.07 19:51
Titel: Trackbar beim Loslassen Event?
Ich möchte, das ein Ereignis eintritt wenn dieser "Cursor" der Trackbar wieder losgelassen wird.
Also das man die Trackbar wie man will verstellen kann, aber das Ereignis erst eintritt, wenn man wieder loslässt. Geht das? OnChange tritt zu früh ein, da es ja erst beim loslassen eintreten soll.

Jemand Ahnung? :gruebel:


stigge - Do 22.03.07 20:44

Keiner eine Idee?


Danniolo - Do 22.03.07 20:47

OnMouseUp vlt. mal ausporbieren?


stigge - Do 22.03.07 21:10

On Mouseup gibt's bei ttrackbar nicht :(


Ralf Jansen - Do 22.03.07 21:10

Hmmh, OnMouseUp ist bei der Trackbar nicht publiziert und MouseUp kommt natürlich auch wenn man einfach nur so unmotiviert auf dem Ding rum klickt. Aber wenn du es ausprobieren willst. Kannst dich ja in die Trackbar reinhacken und MouseUp im Code verdrahten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  HackedTrackbar = class(TTrackBar);

procedure TForm.FormCreate(Sender: TObject);
begin
  HackedTrackbar(TrackBar).OnMouseUp := OnMouseUp;
end;

procedure TForm.OnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // mach was sinnvolles
end;


stigge - Do 22.03.07 21:17

user profile iconRalf Jansen hat folgendes geschrieben:
Hmmh, OnMouseUp ist bei der Trackbar nicht publiziert und MouseUp kommt natürlich auch wenn man einfach nur so unmotiviert auf dem Ding rum klickt. Aber wenn du es ausprobieren willst. Kannst dich ja in die Trackbar reinhacken und MouseUp im Code verdrahten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  HackedTrackbar = class(TTrackBar);//Wenn ich das hier nach  TForm1 = class(TForm) einfüge, bekomme ich lauter Fehler!

procedure TForm.FormCreate(Sender: TObject);
begin
  HackedTrackbar(TrackBar).OnMouseUp := OnMouseUp;
end;

procedure TForm.OnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // mach was sinnvolles
end;


stigge - Do 22.03.07 21:21

user profile iconstigge hat folgendes geschrieben:
user profile iconRalf Jansen hat folgendes geschrieben:
Hmmh, OnMouseUp ist bei der Trackbar nicht publiziert und MouseUp kommt natürlich auch wenn man einfach nur so unmotiviert auf dem Ding rum klickt. Aber wenn du es ausprobieren willst. Kannst dich ja in die Trackbar reinhacken und MouseUp im Code verdrahten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  HackedTrackbar = class(TTrackBar);//Wenn ich das hier nach  TForm1 = class(TForm) einfüge, bekomme ich lauter Fehler!

procedure TForm.FormCreate(Sender: TObject);
begin
  HackedTrackbar(TrackBar).OnMouseUp := OnMouseUp;
end;

procedure TForm.OnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // mach was sinnvolles
end;

Hat sich geklärt^^ Aber ich habe jetzt noch ein anderes Problem:
[Fehler] Unit1.pas(1228): E2003 Undefinierter Bezeichner: 'OnMouseUp'


Ralf Jansen - Do 22.03.07 21:22

Gehört einfach in den Implementation Teil zwischen deinen Funktionen. Ist ja einfach eine weitere Klassendefinition und gehört nicht zu deiner Form.

Wenn du ein anderes Problem meinst zeig deinen Code vielleicht seh ich das dann.


stigge - Do 22.03.07 21:29

user profile iconRalf Jansen hat folgendes geschrieben:
Gehört einfach in den Implementation Teil zwischen deinen Funktionen. Ist ja einfach eine weitere Klassendefinition und gehört nicht zu deiner Form.

Wenn du ein anderes Problem meinst zeig deinen Code vielleicht seh ich das dann.

Siehe oben^^

Quelltext
1:
[Fehler] Unit1.pas(1228): E2003 Undefinierter Bezeichner: 'OnMouseUp'                    


Ralf Jansen - Do 22.03.07 21:29

Hier mal in vollständig


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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure OnMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  THackedTrackbar = class(TTrackBar);

procedure TForm1.FormCreate(Sender: TObject);
begin
  THackedTrackbar(TrackBar1).OnMouseUp := OnMouseUp;
end;

procedure TForm1.OnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // mach was sinnvolles
end;

end.


stigge - Do 22.03.07 21:33

user profile iconRalf Jansen hat folgendes geschrieben:
Hier mal in vollständig


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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure OnMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  THackedTrackbar = class(TTrackBar);

procedure TForm1.FormCreate(Sender: TObject);
begin
  THackedTrackbar(TrackBar1).OnMouseUp := OnMouseUp;
end;

procedure TForm1.OnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // mach was sinnvolles
end;

end.

Genauso hab ich's. Trotzdem noch gleicher Fehler wie oben.


Saubäär - Do 22.03.07 21:33

Moin,

wie wärs so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 if GetAsyncKeyState(VK_LBUTTON) = 0 then begin
  // do what you want
  end;
end;

?

Gruß


Ralf Jansen - Do 22.03.07 21:50

GetAsyncKeyState ... auch nicht dumm.

Hat denn Vorteil das der Code auch zieht wenn man die Trackbarposition per Keyboard ändert.


stigge - Do 22.03.07 21:53

user profile iconSaubäär hat folgendes geschrieben:
Moin,

wie wärs so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 if GetAsyncKeyState(VK_LBUTTON) = 0 then begin
  // do what you want
  end;
end;

?

Gruß

Also 0 wenn die Taste nicht gedrückt ist und 1 wenn gedrückt?


Saubäär - Do 22.03.07 21:54

user profile iconstigge hat folgendes geschrieben:

Also 0 wenn die Taste nicht gedrückt ist und 1 wenn gedrückt?


Ich glaub nicht. Probiers aus! :wink:
z.B. Werte in nem Memo ausgeben !?!


stigge - Do 22.03.07 22:15

user profile iconSaubäär hat folgendes geschrieben:
user profile iconstigge hat folgendes geschrieben:

Also 0 wenn die Taste nicht gedrückt ist und 1 wenn gedrückt?


Ich glaub nicht. Probiers aus! :wink:
z.B. Werte in nem Memo ausgeben !?!

Naja, auf jeden falls funktioniert's. Danke! :zwinker: