Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Compilerschalter/logik: Vista oder höher

  Alt 16. Sep 2011, 13:09
Hallo,

also zwei Versionen möcht ich nicht bauen, da es sich um eine Komponente handelt.

Was ich mir vorstelle, wären zwei Records. Eins für XP und eins für Vista und höher.

Jetzt hab ich zwei Records erstellt:
Delphi-Quellcode:
  TVistaNotifyIconData = record
    cbSize : DWORD;
    Wnd : HWND;
    uID : UINT;
    uFlags : UINT;
    uCallbackMessage: UINT;
    hIcon : HICON;
    szTip : array [0..max_Tip] of Char;
    dwState : DWORD; //Version 5.0
    dwStateMask : DWORD; //Version 5.0
    szInfo : array [0..max_Info] of Char; //Version 5.0
    DUMMYUNIONNAME : TDUMMYUNIONNAME;
    szInfoTitle : array [0..max_Title] of Char; //Version 5.0
    dwInfoFlags : DWORD; //Version 5.0
    guidItem : TGUID;
    hBalloonIcon : HICON;
  end;

  TXPNotifyIconData = record
    cbSize : DWORD;
    Wnd : HWND;
    uID : UINT;
    uFlags : UINT;
    uCallbackMessage: UINT;
    hIcon : HICON;
    szTip : array [0..max_Tip] of Char;
    dwState : DWORD; //Version 5.0
    dwStateMask : DWORD; //Version 5.0
    szInfo : array [0..max_Info] of Char; //Version 5.0
    DUMMYUNIONNAME : TDUMMYUNIONNAME;
    szInfoTitle : array [0..max_Title] of Char; //Version 5.0
    dwInfoFlags : DWORD; //Version 5.0
  end;
Nur leider brauch ich jetzt auch zwei Variablen. Einmal vom Typ "TXPNotifyIconData" und eines vom Typ "TVistaNotifyIconData"
Delphi-Quellcode:
  private
    { Private-Deklarationen }

    //Komponenten-Variablen
    IconData_XP : TXPNotifyIconData;
    IconData_Vista : TVistaNotifyIconData;
Was natürlich auch den Nachteil hat, dass ich jetzt eigentlich jeden Code, auch wenn er identisch ist, doppelt führen muss. Nur wegen der anderen Variablen.

Gib es denn die Möglichkeit das einfach umzuswitschen (vielleicht mittels einer 3. NotifyIconData-Variablen) um nur einmal den Code zu haben?

Ich hätte dann gerne so was gebaut:
Delphi-Quellcode:
      //BalloonTip-Titel setzen
      strPLCopy(IconData.szInfoTitle, FBalloonTipTitle, Pred(SizeOf(IconData.szInfoTitle)));

      //BalloonTip-Info setzen
      strPLCopy(IconData.szInfo, FBalloonTipInfo, Pred(SizeOf(IconData.szInfo)));

      //BalloonTip-TimeOut setzen
      IconData.DUMMYUNIONNAME.uTimeout := FBalloonTipTimeOut;

      //BalloonTip-Flag setzen
      IconData.dwInfoFlags := FBalloonTipSelectedFlag;

      //
      If OS_Vista then //<<== OS-Prüfung
        IconData.hBalloonIcon := FBalloonTipIcon.Handle;

      //
      IconData.DUMMYUNIONNAME.uVersion := NOTIFYICON_VERSION;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat