Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ case von to (https://www.delphipraxis.net/193531-case-von.html)

EWeiss 10. Aug 2017 18:31

case von to
 
Wie kann ich in C++ das verwirklichen.

Delphi-Quellcode:
ID_SELECTAUDIOSTREAM .. ID_SELECTAUDIOSTREAM_LAST:
Code:
case ID_SELECTAUDIOSTREAM:
case ID_SELECTAUDIOSTREAM_LAST:
funktioniert nicht da mir der Bereich zwischen beiden Fehlt.

gruss

Zacherl 10. Aug 2017 18:35

AW: case von to
 
Gibt es in dieser Form leider nicht und muss deshalb mit
Delphi-Quellcode:
if
gelöst werden. Hier der Thread hat ein paar interessante Alternativen:
https://stackoverflow.com/questions/...itch-statement

EWeiss 10. Aug 2017 18:36

AW: case von to
 
Zitat:

Zitat von Zacherl (Beitrag 1378534)
Gibt es in dieser Form leider nicht und muss deshalb mit
Delphi-Quellcode:
if
gelöst werden. Hier der Thread hat ein paar interessante Alternativen:
https://stackoverflow.com/questions/...itch-statement

Danke schau es mir an ;)

gruss

EWeiss 10. Aug 2017 18:41

AW: case von to
 
Scheint etwas kompliziert zu sein..
Meine Ausgangsbasis.

Code:
        // AudioStreams zum Menu addieren
        hSubMenuAudio = CreatePopupMenu();
        AppendMenuW(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenuAudio, L"Select audio stream");
        if (aMediaProperty.NumAudioStream == 0)
            EnableMenuItem(hMenu, 6, MF_POPUP | MF_BYPOSITION | MF_DISABLED);
        else
        {
            int IntI = 0;
            UINT_PTR AudioStreamID;
            for (IntI = 0; IntI < aMediaProperty.NumAudioStream; IntI++)
            {
                if (KVideo_GetStreamInfo(stAudio, IntI, &StreamInfo))
                {
                    EnableMenuItem(hMenu, 6, MF_POPUP | MF_BYPOSITION | MF_ENABLED);
                    AudioStreamID = ID_SELECTAUDIOSTREAM + IntI;
                    AppendMenuW(hSubMenuAudio, MF_STRING | MFT_RADIOCHECK, AudioStreamID, StreamInfo.ppszName);
                }
                if (IntI == 0)
                    CheckMenuItem(hSubMenuAudio, ID_SELECTAUDIOSTREAM, MF_CHECKED);
            }
        }
Ich erstelle hier ein Menu mit Submenus
Abhängig von den AudioStreams die vorhanden sind erhöhe ich die ID.
Code:
AudioStreamID = ID_SELECTAUDIOSTREAM + IntI;
Der Bereich der Maximalen ID ist festgelegt.
Code:
#define ID_SELECTAUDIOSTREAM           32800
#define ID_SELECTAUDIOSTREAM_LAST      32809 // 9 Einträge Reserviert
Wenn es so wie in Delphi nicht geht wie soll ich dann die Value in der WinProc analysieren.
Die Beispiele sind etwas verworren ;)

gruss

EWeiss 10. Aug 2017 20:37

AW: case von to
 
OK dann zurück zu DOS Zeiten.
Also das hat Delphi besser gelöst. thumbs-up für Delphi.
Eventuell auf Max 4 einstellen kann mir nicht vorstellen das es mehr als 4 AudioStreams in einem Video gibt.
Code:
        case ID_SELECTAUDIOSTREAM:
        case ID_SELECTAUDIOSTREAM + 1:
        case ID_SELECTAUDIOSTREAM + 2:
        case ID_SELECTAUDIOSTREAM + 3:
        case ID_SELECTAUDIOSTREAM + 4:
        case ID_SELECTAUDIOSTREAM + 5:
        case ID_SELECTAUDIOSTREAM + 6:
        case ID_SELECTAUDIOSTREAM + 7:
        case ID_SELECTAUDIOSTREAM + 8:
        case ID_SELECTAUDIOSTREAM_LAST:
        {
            TPlayerState ps = KVideo_GetPlayerState();
            if (ps == psNotReady)
                return 0;

            if (ps == psPlaying)
                KVideo_Pause();

            DWORD AudioSelectItem = (DWORD)wParam - ID_SELECTAUDIOSTREAM;

            KVideo_SelectAudioStream(AudioSelectItem);
            CheckMenuItem(hSubMenuAudio, (UINT)wParam, MF_CHECKED);
            MenuAudioChecked = AudioSelectItem;
            if (ps == psPlaying)
                KVideo_Play();
        }
        break;
gruss

Zacherl 10. Aug 2017 23:27

AW: case von to
 
Was du auch noch machen kannst:
Code:
switch (value)
{
case EXPR1:
    break;
case EXPR2:
    break;
default:
{
    if ((value >= EXPR_MIN) && (value <= EXPR_MAX))
    {
        // Handle event
    }
}
}

EWeiss 11. Aug 2017 01:32

AW: case von to
 
Zitat:

Zitat von Zacherl (Beitrag 1378541)
Was du auch noch machen kannst:
Code:
switch (value)
{
case EXPR1:
    break;
case EXPR2:
    break;
default:
{
    if ((value >= EXPR_MIN) && (value <= EXPR_MAX))
    {
        // Handle event
    }
}
}

Sollte ich mal versuchen :)
Danke.

gruss

bra 11. Aug 2017 09:51

AW: case von to
 
Oder statt case einfach ein if verwenden:

Code:
if ((x >= ID_SELECTAUDIOSTREAM) && (x <= ID_SELECTAUDIOSTREAM_LAST)) {

}

EWeiss 11. Aug 2017 10:51

AW: case von to
 
Zitat:

Zitat von bra (Beitrag 1378573)
Oder statt case einfach ein if verwenden:

Code:
if ((x >= ID_SELECTAUDIOSTREAM) && (x <= ID_SELECTAUDIOSTREAM_LAST)) {

}

EDIT:
Ok so geht's..

Code:
    case WM_COMMAND:
    {
        wpItem = LOWORD(wParam);
        if (wpItem == ID_SHOWPLAYBACKPOSITION)
        {
            if (bPBchecked)
            {
                CheckMenuItem(hMenu, ID_SHOWPLAYBACKPOSITION, MF_UNCHECKED);
                bPBchecked = FALSE;
                if (KVideo_HasOverlayImage())
                    KVideo_UpdateOverlayImage(0);
            }
            else
            {
                CheckMenuItem(hMenu, ID_SHOWPLAYBACKPOSITION, MF_CHECKED);
                bPBchecked = TRUE;
            }
        }
        else if (wpItem == ID_KEEPASPECTRATIO)
        {
            if (bARchecked)
            {
                CheckMenuItem(hMenu, ID_KEEPASPECTRATIO, MF_UNCHECKED);
                KVideo_KeepAspectRatio(FALSE);
                bARchecked = FALSE;
            }
            else
            {
                CheckMenuItem(hMenu, ID_KEEPASPECTRATIO, MF_CHECKED);
                KVideo_KeepAspectRatio(TRUE);
                bARchecked = TRUE;
            }
        }

        else if (wpItem == ID_SHOWMEDIAFILEPROPERTY)
        {
            if (!bFullScreen)
                KVideo_ShowMediaInfo();
        }
        else if ((wpItem >= ID_SELECTAUDIOSTREAM) && (wpItem <= ID_SELECTAUDIOSTREAM_LAST))
        {
            TPlayerState ps = KVideo_GetPlayerState();
            if (ps == psNotReady)
                return 0;

            if (ps == psPlaying)
                KVideo_Pause();

            DWORD AudioSelectItem = (DWORD)wParam - ID_SELECTAUDIOSTREAM;

            KVideo_SelectAudioStream(AudioSelectItem);
            CheckMenuItem(hSubMenuAudio, (UINT)wParam, MF_CHECKED);
            MenuAudioChecked = AudioSelectItem;
            if (ps == psPlaying)
                KVideo_Play();
        }
        else if ((wpItem >= ID_SELECTVIDEOSTREAM) && (wpItem <= ID_SELECTVIDEOSTREAM_LAST))
        {
            TPlayerState ps = KVideo_GetPlayerState();
            if (ps == psNotReady)
                return 0;

            if (ps == psPlaying)
                KVideo_Pause();

            DWORD VideoSelectItem = (DWORD)wParam - ID_SELECTVIDEOSTREAM;

            KVideo_SelectVideoStream(VideoSelectItem);
            CheckMenuItem(hSubMenuVideo, (UINT)wParam, MF_CHECKED);
            MenuVideoChecked = VideoSelectItem;
            if (ps == psPlaying)
                KVideo_Play();
        }
        else if (wpItem == ID_SUBTITLECONFIG)
        {
            if (KVideo_GetPlayerState() == psNotReady)
            {
                MessageBox(hWnd, L"Sub title configuration page can be shown after opening a media file.", L"Confirm", MB_OK);
                return 0;
            }
            BOOL bRegistered = FALSE;
            BOOL bLoaded = FALSE;

            KVideo_XySubFilterState(&bRegistered, &bLoaded);

            if (!bRegistered)
            {
                MessageBox(hWnd, L"Filter for sub title display (xySubFilter.dll) is not registered.", L"Confirm", MB_OK);
                return 0;
            }
            if (!bLoaded)
                MessageBox(hWnd, L"Filter for sub title display (xySubFilter.dll) is not loaded.", L"Confirm", MB_OK);
            else
                Show_XySubFilterPropertyPage();
        }
    }
Nur für WM_COMMAND den rest habe ich als Case belassen.

gruss

bra 11. Aug 2017 11:25

AW: case von to
 
Häh? x ist der Wert den du vergleichen willst (also case(x)). Verstehe jetzt nicht, was du meinst.

Edit: Da kam dein Edit dazwischen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.
Seite 1 von 2  1 2      

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