Autor Beitrag
M. Raab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Mo 21.04.03 14:41 
Hallo NG,

irgendwas mache ich falsch :nixweiss:

ausblenden 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:
{------------------------------------------------------------------}
{  Message-Behandlung des Programs festlegen                       }
{------------------------------------------------------------------}
function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
begin
  case (Msg) of
    WM_MOUSEWHEEL:
      begin
        if Drehrichtung>HIWORD(wPARAM) then
          begin
            Drehrichtung:=HIWORD(wPARAM);
            skalar:=skalar-0.05;
            form1.normierung;
            result:=0;
          end;
        if Drehrichtung<HIWORD(wPARAM) then
          begin
            Drehrichtung:=HIWORD(wPARAM);
            skalar:=skalar+0.05;
            form1.normierung;
            result:=0;
          end;
      end;
    WM_CREATE:


Die Variabel DREHRICHTUNG ist global und auf 120 gestellt. Ich möchte damit vergrössern bzw. verkleinern, je nachdem in welche Richtung das Rad gedreht wird. Problem nun: wenn ich die Maus um einen Zacken dreh (egal in welche Richtung) funktioniert das. Ab dann ist schluss und die Grafik fängt an zu zittern - sie vergrössert sich 1x und verkleinert sich dann wieder um 1x. Es scheint so zu sein, als ob ich nicht richtig auf das Richtungereignis reagiere.

Verknüpfe ich das mit einem Tastaturereignis (Cursor rauf oder runter) klappt alles. Ist aber unschön. Kann mir jemand helfen, auf das Wheel-Richtungsereignis richtig zu reagieren ?

Gruss und Danke


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 21.04.03 22:10 
Hallo!

Ich blick dein Quelltext net, ganz. Egal, ich versuch dir trotzdem zu helfen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    WM_MOUSEWHEEL:
      begin
        if HIWORD(wParam) then
          skalar := skalar - 0.05
        else
          skalar := skalar + 0.05;
        form1.normierung;
        Result := 0;
      end;
Und was geht das jetzt genau nict, oder klappt das?

Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Mi 23.04.03 13:16 
Hallo,

bei Deinem Vorschlag bekomme ich ne Meldung: Ausdruck muss BOOELAN sein. Das liegt am: HIWORD(wParam)

Ich habe den Text jetzt wie folgt geändert:


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
begin
  case (Msg) of
    WM_MOUSEWHEEL:
      begin
        if HIWORD(wPARAM)>0 then
          begin
            skalar:=skalar-0.05;        <-  Drehrichtung nach Vorne
            form1.normierung; 
            result:=0;
          end else begin
            skalar:=skalar+0.05;       <-  Drehrichtung nach Unten
            form1.normierung;
            result:=0;
          end;
      end;
    WM_CREATE:


Der Werst SKALAR ist nur ein Vergrösserungs-/Verkleinerungsfaktor. Mit der Funktion FORM1.NORMIERUNG normiere ich dann die Daten neu und zeichne sie neu. Wenn ich den Text so lasse, reagiert alles auf das Mausrad recht gut. Aber nur in eine Richtung: er verkleinert jetzt alles nur (d.h. SKALAR:=SKALAR-0.05). Wenn ich in den APIs lese, steht da was von 120 als Normwert und von positiver und negativer Abweichung - je nach Drehrichtung des Rades. Irgendwie klappt aber das Feststellen der Drehrichtung bei mir nicht.

Kannst DU helfen ?


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mi 23.04.03 19:31 
Hallo Herr Raab ;)!

Es lag nur an einem kleinen Fehler, nämlich der Typumwandlung. Du musst speziell angeben, dass es sich um ein SmallInt handelt, da es sonst keine negativen Werte gibt.
Hier ein Beispiel, was nun auch berücksichtig, wie "weit" gedreht wurde:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  Delta: SmallInt;
begin
  [...]
    WM_MOUSEWHEEL:
      begin
        Delta := HIWORD(wParam);
        if Delta > 0 then
          begin
            skalar:=skalar - 0.05 * Delta / WHEEL_DELTA;
            result:=0;
          end else begin
            skalar:=skalar + 0.05 * Delta / WHEEL_DELTA;
            form1.normierung;
            result:=0;
          end;
      end;
Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Do 24.04.03 11:21 
Hallo


Vielen DANK - klappt jetzt super. :D

Kleine Ursache, große Wirkung.

Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!