AGB  ·  Datenschutz  ·  Impressum  







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

switch, break, case c++

Ein Thema von EWeiss · begonnen am 27. Aug 2017 · letzter Beitrag vom 28. Aug 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: switch, break, case c++

  Alt 27. Aug 2017, 15:10
Zitat:
"Meinen Quelltext der DLL SK_AERO gibt es NUR auf persönlicher Anfrage. Das Teil ist nicht geheim, aber habe einiges an Zeit dafür investiert"
JO den könnte ich dir schicken.
Aber dieser ist in Delphi geschrieben nicht in C++

Das C++ Project habe ich nur für die KVideoPlayer_x64.dll geschrieben.. weil diese MadVR und LAVFilter unterstützt.
Vielleicht braucht das ja mal jemand.

Habe dich zu meinen Kontakten addiert.
Schick mir ne Mail..

Habe jetzt noch den Vollbildmodus umgeschrieben.

Code:
       
case ID_FULLSCREEN:
    if (KVideo_GetPlayerState() != psNotReady)
        ToggleFullScreen();
    break;
Code:
void ToggleFullScreen()
{
    static DWORD screenWidth, screenHeight;
    static RECT rcSaved;
    long nTop = 0;
   

    gP.bFullScreen = !gP.bFullScreen;

    if (gP.bFullScreen)
    { 
        // Wechseln in den Vollbildmodus.
        GetWindowRect(gP.hMain, &rcSaved);

        rcSaved.right = GetSystemMetrics(SM_CXSCREEN);
        rcSaved.bottom = GetSystemMetrics(SM_CYSCREEN);
        SetWindowLongPtr(gP.hMain, GWL_STYLE, WS_POPUP);
        AdjustWindowRect(&rcSaved, WS_POPUP, FALSE);

        SetWindowPos(gP.hMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_SHOWWINDOW);

        HMONITOR hMonitor = MonitorFromWindow(gP.hMain, MONITOR_DEFAULTTONEAREST);

        MONITORINFO tmi;
        ClearMemory(&tmi, sizeof(tmi));
        tmi.cbSize = sizeof(tmi);

        RECT rw;
        GetWindowRect(gP.hMain, &rw);
        GetMonitorInfo(hMonitor, &tmi);

        screenWidth = abs(Width(tmi.rcMonitor));
        screenHeight = abs(Height(tmi.rcMonitor));

        long ctrlpanelHeigh = 97;
        nTop = GetSystemMetrics(SM_CYMENU);
        rw.left = tmi.rcMonitor.left;
        rw.top = tmi.rcMonitor.top - nTop;
        rw.right = screenWidth;
        rw.bottom = screenHeight + nTop + ctrlpanelHeigh;
        MoveWindow(gP.hMain, rw.left, rw.top, rw.right, rw.bottom, TRUE);
        KVideo_Resize();
    }
    else
    { 
        // Zurück zum Fenstermodus.
        SetWindowLongPtr(gP.hMain, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE);
        MoveWindow(gP.hMain, rcSaved.left, rcSaved.top, dpi(XMIN_SIZE), dpi(YMIN_SIZE), FALSE);
        KVideo_Resize();
    }
}

gruss

Geändert von EWeiss (27. Aug 2017 um 17:04 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.176 Beiträge
 
Delphi 12 Athens
 
#2

AW: switch, break, case c++

  Alt 28. Aug 2017, 07:10
Mensch72 hat das schon ausführlich und richtig erklärt.

Bin mir nicht sicher ob das erwähnt wurde (habe mit jetzt nicht Alles durchgelesen):
Zitat:
Soweit ich C kenne, wird jeder Case Zweig durchlaufen,
Delphi-Quellcode:
switch(x)

    case 1:
        Code1;
        break;  // --> Springt raus

    case 2:
        Code2;
        break; // --> Springt raus

    case 3:
        Code3;  // --> Läuft weiter zur nächsten Anweiseung (4) 

    case 4:
        Code4;
        break; // --> Springt raus

    default:
        Code5;
}


// Bei 3 --> Code3 ... Code4
// Bei 4 --> Code4
//
// Das entspräche in etwa in Pascal (leider nicht ganz so):

  
case (expression) of
   1 : Code1;
   2 : Code2;
   3, 4: Code3_4; // So verhält sich das in Pascal, leider nicht ganz so wie in C
   else
         Code5;
end;

// Bei 3 --> Code3_4
// Bei 4 --> Code3_4
//
//--> Da muss ich in Code3_4 nochmal checken ob es jetzt aus 3 oder 4 kommt
Rollo
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: switch, break, case c++

  Alt 28. Aug 2017, 07:17
Na ja mich interessiert weniger wie es unter Delphi abläuft das ist ja bekannt.
Mein Unverständnis liegt/lag darin das es kein festgelegte Definition gibt wie ein Break gesetzt werden muss.

Ist halt nicht das gleiche wie

Delphi-Quellcode:
X:
begin
  result := 0;
  exit; // nicht gleich break;
end;
gruss
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4

AW: switch, break, case c++

  Alt 28. Aug 2017, 07:54
Du kannst das break überall im Code eines case-Zweigs setzten - du kannst theoretisch auch mehrere breaks an unterschiedlichen Stellen haben. Ob dabei jetzt irgendwelche Klammern (Scopes) verwendet werden oder nicht macht fürs break keinen Unterschied!
Du kannst dir das so ähnlich vorstellen wie ein Exit in Delphi - das kannst du überall innerhalb einer Funktion haben, es spring immer ans Ende der Funktion (finally Blöcke ignorieren wir mal). Ein break in einem case spring immer ans Ende des switch. Wenn dir der Debugger dazwischen noch bei irgendwelchen anderen break Zeilen stehen bleibt kannst du das ignorieren - das hängt mit dem generierten Code zusammen, macht aber keinen semantischen Unterschied.
Manuel Pöter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: switch, break, case c++

  Alt 28. Aug 2017, 08:14
Zitat:
Wenn dir der Debugger dazwischen noch bei irgendwelchen anderen break Zeilen stehen bleibt kannst du das ignorieren
Ok
Danke.

gruss
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: switch, break, case c++

  Alt 28. Aug 2017, 08:39
Und noch mal der Vollständigkeithalber:

"{" und "}" dienen nur der Lesbarkeit, können also weggelassen werden.

"break" dient dem Abschluß eines Zweiges einer Switch..Case;

"break" kann im letzten case-Zweig auch weggelassen werden.

Wird "break" mittendrinn weggelassen, so werden die weiteren case's ausgeführt, bis ein break kommt oder
die Switch-Anweisung zuende ist;

Beispiele:

Code:
   switch(x){
      case 1: b=0;c=0;break;
      case 2: b=1;c=1;break;
   }
Code:
   switch(x){
     case 1: b=0;c=0;break;
     case 2: b=1;c=1;break;
     default: b=99;c=99;
   }
Spezialfälle:

Code:
   switch(x){
     case 1: b=0;c=0;
     else b=1;c=1;
     default: b=99;c=99;
   }
Ergebnis wär in dem Fall b=99 und c=99, da die Case nicht abegeschlossen wird (mit break);

Ich hoffe ich konnte dir eine bringen
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#7

AW: switch, break, case c++

  Alt 28. Aug 2017, 08:43
"{" und "}" dienen nur der Lesbarkeit, können also weggelassen werden.
Sorry, aber das ist so nicht richtig! Die geschwungenen Klammern definieren einen Scope, der für die Lebensdauer von Variablen äußerst wichtig ist (Stichwort RAII). Ob sie weggelassen werden können oder nicht hängt also sehr stark vom Kontext ab!
Manuel Pöter
  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 18:35 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-2025 by Thomas Breitkreuz