AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mousewheel kontrollieren

Ein Thema von EWeiss · begonnen am 21. Aug 2017 · letzter Beitrag vom 21. Aug 2017
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:00
Zitat:
Was passiert denn in deiner Anwendung, wenn bWheel auf True gesetzt wird?
Dann zeichne ich mein Bitmap..

Und nach dem zeichnen wird bWheel auf false gesetzt.
Das ist mir aber zu kurz weil dann direkt wieder auf die Anzeige der Zeit geschaltet wird.

Bei der Scrollbar wird das zeichnen der Zeit erst dann fortgesetzt wenn ich das Thumbnail nicht mehr drücke.
Was genau zeichnest du denn auf dein Bitmap?
Stelle dir eine MouseWheel-Aktion vor wie einmal draufklicken und loslassen auf den Thumbnail der Scrollbar vor.

Wenn es dir zeitlich nicht reicht, weil dann die Timestamp-Anzeige (?) über die Stelle sofort rüberpinselt verzögere das doch per Timer?
Delphi-Quellcode:
if bWheel then
begin
  PaintThings;
  StartTimer;
end;

...

procedure TimerEvent;
begin
  //so und soviele Millisekunden später;
  StopDoingPaintThings;
  bWheel := False;
  StopTimer;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:11
Zitat:
verzögere das doch per Timer?
Das läuft im Timer

ok zur Veranschaulichung!

Bsp. HSCROLL
sobald einer der unteren messagen eintritt wird gP.bVolume auf True gesetzt.
lasse ich die Maus los schalte ich sie bei TB_ENDTRACK wieder auf false.
Im Timer wird dann die Schrift.. Value der Lautstärke auf ein Overlay Bitmap gezeichnet solange bis die Maus losgelassen wird und das Ereignis TB_ENDTRACK eintritt.

Code:
    case WM_HSCROLL:
    {
        switch LOWORD(wParam)
        {
        case TB_ENDTRACK:
            gP.bVolume = FALSE;
            break;
        case TB_THUMBTRACK: // ziehen des "Sliders"
        case TB_TOP:        // Pos1
        case TB_BOTTOM:     // Ende
        case TB_LINEDOWN:   // Pfeiltasten oben/unten
        case TB_PAGEDOWN:   // Bild runter & in die Leiste geklickt
        case TB_PAGEUP:     // Bild auf & in die Leiste geklickt
        {
            gP.bVolume = TRUE;
            gP.Position = (int)SendMessage(gP.hTBVolume, TBM_GETPOS, 0, 0);
            if (gP.Position == 0)
                KVideo_SetVolume(-10000);
            else
                KVideo_SetVolume(LONG(5000 * log10(gP.Position)) - 10000);
        }
        break;
        }
    }
    break;
Timer..

Code:
                        if (gP.bWheel)
                        {
                            WCHAR wWheel[MAX_PATH] = { 0 };
                            WCHAR wtmpWheel[MAX_PATH] = { 0 };
                            if (gP.zoom < 10)
                            {
                                _snwprintf_s(wtmpWheel, MAX_PATH, 259, L"%I64u Zoom", gP.zoom);
                                Str_Combine(wWheel, L"0", wtmpWheel);
                            }
                            else
                                _snwprintf_s(wWheel, MAX_PATH, 259, L"%I64u Zoom", gP.zoom);

                            DrawTextToDC(gP.OverlayDC, (WCHAR*)wWheel, rc.left, rc.top, nColor, gP.FontName, 36, n3D, ZD_TextHorzUp, gP.PrivateFont);
                            gP.bWheel = FALSE;
                        }
                        else if (gP.bVolume)
                        {
                            WCHAR wVolume[MAX_PATH] = { 0 };
                            WCHAR wtmpVolume[MAX_PATH] = { 0 };
                            int volume = (int)SendMessage(gP.hTBVolume, TBM_GETPOS, 0, 0);

                            if (volume < 100)
                            {
                                _snwprintf_s(wtmpVolume, MAX_PATH, 259, L"%d Vol", volume);
                                Str_Combine(wVolume, L"0", wtmpVolume);
                            }
                            else
                                _snwprintf_s(wVolume, MAX_PATH, 259, L"%d Vol", volume);

                            DrawTextToDC(gP.OverlayDC, (WCHAR*)wVolume, rc.left, rc.top, nColor, gP.FontName, 36, n3D, ZD_TextHorzUp, gP.PrivateFont);
                        }
                        else
                            DrawTextToDC(gP.OverlayDC, (WCHAR*)OverlayTime, rc.left, rc.top, nColor, gP.FontName, 36, n3D, ZD_TextHorzUp, gP.PrivateFont);
bei Volumen ist das kein Problem weil ich hier ein Ereignis auswerten kann.
Das geht aber nicht bei MouseWheel.


gruss

Geändert von EWeiss (21. Aug 2017 um 11:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.323 Beiträge
 
Delphi 12 Athens
 
#3

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:16
Was du suchst ist also ein Timer, der nach x Millisekunden des Nichtdrehens etwas macht? Beim Mausrad gibt es nunmal kein Ende, denn woher soll der PC wissen, ob ich nach dem letzten Scrollereignis nicht doch nochmal einen Schritt drehen will oder vielleich doch nicht mehr oder erst in 10 Sekunden oder in einer Stunde?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:20
Was du suchst ist also ein Timer, der nach x Millisekunden des Nichtdrehens etwas macht? Beim Mausrad gibt es nunmal kein Ende, denn woher soll der PC wissen, ob ich nach dem letzten Scrollereignis nicht doch nochmal einen Schritt drehen will oder vielleich doch nicht mehr oder erst in 10 Sekunden oder in einer Stunde?
Ich suche nach einer Möglichkeit auf das scrollen zu reagieren nachdem ich nicht mehr scrolle.
Muss doch irgendwie gehen andere machen das doch auch mit ihrem Overlay Bitmaps.

Wenn ich direkt nach DrawText.. bWheel auf False setze ist das zu kurz.
Und mit Sleep und Konsorte bringt das nichts.

gruss

Geändert von EWeiss (21. Aug 2017 um 11:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.323 Beiträge
 
Delphi 12 Athens
 
#5

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:22
Lies meinen ersten Satz und dann rate mal, wie die das machen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:23
Lies meinen ersten Satz und dann rate mal, wie die das machen.
Zum raten habe ich keine zeit.
Wenn du gelesen hast das die ganze Geschichte in einem Timer abläuft dann wüsstest du warum ich es nicht über einen zusätzlichen Timer regeln will.

OK. Dann werde ich es in Kombination mit der Shift taste regeln.
Dann kann ich darauf reagieren wenn die Taste losgelassen wird.

gruss

Geändert von EWeiss (21. Aug 2017 um 11:30 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Mousewheel kontrollieren

  Alt 21. Aug 2017, 11:44
Wenn du gelesen hast das die ganze Geschichte in einem Timer abläuft dann wüsstest du warum ich es nicht über einen zusätzlichen Timer regeln will.
"Ja hallo, ich will eine alte Gartenhütte abreißen und möchte dafür aber AUF GAR KEINEN FALLEN einen Vorschlaghammer benutzen, geht das denn nicht auch mit einer Harke?
Weil den Hammer benutze ich schon, um meinen wackligen Tisch zu stabilisieren, da möchte ich ihn nicht noch zusätzlich benutzen.
Eine Harke hat ja auch einen Stil und vorne Metall dran, dass muss ja wohl auch damit gehen"

Nimm doch unsere Ratschläge einfach an Emil...Es geht nicht immer alles nur weil du es so möchtest.
So funktioniert das im Leben nicht.
Oft sind deine "Lösungen" schlimme von Hinten-durch-die-Brust-ins-Auge-Geschichten, die du wie eine Löwenmutter ihr Junges bis aufs Blut verteidigst.
Eine Anwendung kann auch mehr als einen Timer haben, trau dich!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz