AGB  ·  Datenschutz  ·  Impressum  







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

case von to

Ein Thema von EWeiss · begonnen am 10. Aug 2017 · letzter Beitrag vom 11. Aug 2017
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

case von to

  Alt 10. Aug 2017, 19:31
Wie kann ich in C++ das verwirklichen.

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

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: case von to

  Alt 10. Aug 2017, 19:35
Gibt es in dieser Form leider nicht und muss deshalb mit if gelöst werden. Hier der Thread hat ein paar interessante Alternativen:
https://stackoverflow.com/questions/...itch-statement
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: case von to

  Alt 10. Aug 2017, 19:36
Gibt es in dieser Form leider nicht und muss deshalb mit if gelöst werden. Hier der Thread hat ein paar interessante Alternativen:
https://stackoverflow.com/questions/...itch-statement
Danke schau es mir an

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: case von to

  Alt 10. Aug 2017, 19:41
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: case von to

  Alt 10. Aug 2017, 21:37
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

Geändert von EWeiss (11. Jul 2019 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: case von to

  Alt 11. Aug 2017, 00:27
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
    }
}
}
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: case von to

  Alt 11. Aug 2017, 02:32
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
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: case von to

  Alt 11. Aug 2017, 10:51
Oder statt case einfach ein if verwenden:

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

}
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: case von to

  Alt 11. Aug 2017, 11:51
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

Geändert von EWeiss (11. Aug 2017 um 12:24 Uhr)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: case von to

  Alt 11. Aug 2017, 12:25
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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:24 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