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;