AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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   
Foren-Tage 2017
DIE Konferenz für Delphi-Entwickler mit vielen Vorträgen und ganztägigen Workshops, veranstaltet u.A. von der Delphi-PRAXiS und Embarcadero.
21.-23. September 2017 in Hamburg · Mehr Infos unter forentage.de.
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.041 Beiträge
 
Delphi 2010 Architect
 
#1

case von to

  Alt 10. Aug 2017, 18: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.144 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: case von to

  Alt 10. Aug 2017, 18: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
"Do not argue with an idiot. He will drag you down to his level and beat you with experience."
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.041 Beiträge
 
Delphi 2010 Architect
 
#3

AW: case von to

  Alt 10. Aug 2017, 18: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
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.041 Beiträge
 
Delphi 2010 Architect
 
#4

AW: case von to

  Alt 10. Aug 2017, 18: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
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.041 Beiträge
 
Delphi 2010 Architect
 
#5

AW: case von to

  Alt 10. Aug 2017, 20: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
Miniaturansicht angehängter Grafiken
thumbs-up.png  

Geändert von EWeiss (10. Aug 2017 um 20:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.144 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: case von to

  Alt 10. Aug 2017, 23: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
    }
}
}
"Do not argue with an idiot. He will drag you down to his level and beat you with experience."
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.041 Beiträge
 
Delphi 2010 Architect
 
#7

AW: case von to

  Alt 11. Aug 2017, 01: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
632 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: case von to

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

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

}
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.041 Beiträge
 
Delphi 2010 Architect
 
#9

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)) {

}
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 11:24 Uhr)
  Mit Zitat antworten Zitat
bra

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

AW: case von to

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

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf