Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Scrollbar position ist falsch (https://www.delphipraxis.net/193464-scrollbar-position-ist-falsch.html)

EWeiss 3. Aug 2017 10:11

Scrollbar position ist falsch
 
Ich setze beim Start der Anwendung mit SetScrollRange den Maximalen Scroll wert.
Im Timer wird die Position gesetzt.

Code:
SetScrollPos(hWnd, SBS_HORZ, (int)MilSecond, FALSE);
In WM_HSCROLL versuche ich die aktuelle Thumb Position in Erfahrung zu bringen.
Ich frage mich nun warum wird diese falsch ausgegeben?

Code:
LRESULT CALLBACK MovieProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    LONG64 Position = 0;

    switch (message)
    {
    case WM_HSCROLL:
    {
        switch LOWORD(wParam)
        {
        case SB_THUMBTRACK:
        {
            bIsTracking = TRUE;
        }

        break;
        case SB_ENDSCROLL:
        {
            bIsTracking = FALSE;
        }
        break;
        case SB_THUMBPOSITION:
        {
            Position = HIWORD(wParam);
            KVideo_SetStreamPosition(Position * 10000);
        }
        break;
        }
    }
    break;

    case WM_TIMER:
    {
        if (wParam = MOVIE_TIMER)
        {
            if (bIsTracking)
            {
                return 0;
                break;
            }

            if (TimerTick)
            {
                return 0;
                break;
            }
            if (aMediaProperty.PlaybackLength > 0)
            {
                MilSecond = KVideo_GetStreamPosition() / 10000;
                LONG64 Second = MilSecond / 1000;
               
                SetScrollPos(hWnd, SBS_HORZ, (int)MilSecond, FALSE);

                if (Second == LastPlayingPos)
                {
                    TimerTick = FALSE;
                    return 0;
                    break;
                }
                else
                    LastPlayingPos = Second;
            }
        }
    }
    break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Die frage warum wird die falsche Position ausgegeben wenn ich den Thumb loslasse?

gruss

Fritzew 3. Aug 2017 10:24

AW: Scrollbar position ist falsch
 
Schau Dir mal Deine Case und Switch flows genauer an.......

Deine Breaks sind, ich sag mal suboptimal ;-)
Wenn Du C++ Code schreibst must Du aufhören Delphi zu denken

Gruss

EWeiss 3. Aug 2017 10:25

AW: Scrollbar position ist falsch
 
Zitat:

Zitat von Fritzew (Beitrag 1377986)
Schau Dir mal Deine Case und Switch flows genauer an.......

Deine Breaks sind, ich sag mal suboptimal ;-)
Wenn Du C++ Code schreibst must Du aufhören Delphi zu denken

Gruss

Wie wäre es denn richtig ?
Und vor allem behebt das mein Problem mit der Scroll Position?

OK ich denke kann diese aus
Code:
if (wParam = MOVIE_TIMER)
rauswerfen
und nur am ende von Case setzen.
Code:
    case WM_TIMER:
    {
        if (wParam = MOVIE_TIMER)
        {
            if (bIsTracking)
            {
                return 0;
            }

            if (TimerTick)
            {
                return 0;
            }
            if (aMediaProperty.PlaybackLength > 0)
            {
                MilSecond = KVideo_GetStreamPosition() / 10000;
                LONG64 Second = MilSecond / 1000;
               
                SetScrollPos(hWnd, SBS_HORZ, (int)MilSecond, FALSE);

                if (Second == LastPlayingPos)
                {
                    TimerTick = FALSE;
                    return 0;
                }
                else
                    LastPlayingPos = Second;
            }
        }
    }
    break;
gruss

Klaus01 3. Aug 2017 10:31

AW: Scrollbar position ist falsch
 
Code:
 if (wParam = MOVIE_TIMER)
        {
            if (bIsTracking)
vielleicht nur ein Tipfehler - sollte es nicht == heißen?

Grüße
Klaus

EWeiss 3. Aug 2017 10:33

AW: Scrollbar position ist falsch
 
Zitat:

Zitat von Klaus01 (Beitrag 1377988)
Code:
 if (wParam = MOVIE_TIMER)
        {
            if (bIsTracking)
vielleicht nur ein Tipfehler - sollte es nicht == heißen?

Grüße
Klaus

Danke
Bin mir da jetzt nicht sicher lerne den C++ Kram erst.
Wo nun der Unterschied ist zwischen = und == muss ich erst noch ergründen ;)

Der Compiler meldet keinen Fehler und im Timer spring ich auch rein beim Debugen

gruss

Klaus01 3. Aug 2017 10:37

AW: Scrollbar position ist falsch
 
in C und C++ ist "=" ein Zuweisung enspricht in Pascal :=
== ist dann der Vergleich.

Grüße
Klaus

Fritzew 3. Aug 2017 10:38

AW: Scrollbar position ist falsch
 
Zitat:

wo nun der unterschied ist zwischen = und == muss ich erst noch ergründen
c++ "=" delphi ":="
c++ "==" delphi "="

Und der compiler meckert nicht weil es gültiger Code ist

In C++ sind halt viele Sachen erlaubt die in Delphi nicht gehen.
Dein if (wParam = MOVIE_TIMER) macht eine Zuweisung an wParam und überprüft ob das Ergebnis <> 0 ist.......
Obwohl rot doch abgeschickt:-D

https://www.tutorialspoint.com/cplusplus/index.htm
Die Seite ist gar nicht schlecht

EWeiss 3. Aug 2017 10:43

AW: Scrollbar position ist falsch
 
Danke ;)

Jo dann muss ich das noch korrigieren.
Wobei das aber nicht mein Problem mit der Scroll Position löst. :)

gruss

EWeiss 3. Aug 2017 10:54

AW: Scrollbar position ist falsch
 
Habe mal die *.cpp angehängt falls es jemand testen möchte.
Beim verschieben des Thumb springt dieses immer wieder auf 0 bzw. der letzten Position zurück.

gruss

EWeiss 5. Aug 2017 16:50

AW: Scrollbar position ist falsch
 
Zitat:

Zitat von EWeiss (Beitrag 1377998)
Habe mal die *.cpp angehängt falls es jemand testen möchte.
Beim verschieben des Thumb springt dieses immer wieder auf 0 bzw. der letzten Position zurück.

gruss

Problem wurde behoben.

Der MaxRange für die Scrollbar(HSCROLL) war einfach zu hoch.
Habe den auf Sekunden umgelegt anstelle von Nano(Millisekunden) Sekunden

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz