![]() |
Compilerschalter/logik: Vista oder höher
Hallo,
ich suche gerade verzweifelt die Syntax für eine Compilerabfrage/Compilerschalter um einen Code nur bei Vista oder höher aufzurufen. Also irgendwie in dieser Richtung:
Delphi-Quellcode:
Ich hab so was schon mal gesehen, aber leider hab ich jetzt auf der Durchsuche von einigen Codes nichts gefunden.
$IfDef Vista_higher
//Hier ist Code der nur compiliert werden soll wenn das Ding mit Vista läuft. $endif |
AW: Compilerschalter/logik: Vista oder höher
Zitat:
Welchen Sinn macht das? :gruebel: |
AW: Compilerschalter/logik: Vista oder höher
Oder mal anders gefragt:
Ich habe folgendes Record:
Delphi-Quellcode:
Die letzten Zwei Einträge
TNewNotifyIconData = 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;
Delphi-Quellcode:
gibts nur ab Vista oder höher, nicht aber bei XP.
guidItem : TGUID;
hBalloonIcon : HICON; Wenn die zwei Zeilen bei Vista drin sind, wird das BalloonTip nicht mehr angezeigt. Nun brauch ich, vermutlich mal, irgendeine Abfrage um den Code bei XP und Vista und höher verwenden zu können |
AW: Compilerschalter/logik: Vista oder höher
Du musst ja cbSize setzen, Du könntest dort einfach, wenn das aktuelle OS XP ist, cbSize := SizeOf(Record)-SizeOf(GUID)-SizeOf(HICON) setzen.
|
AW: Compilerschalter/logik: Vista oder höher
Ein Compilerschalter wäre eh unpraktisch, außer du kompilierst Versionen, welche dann jeweils nur auf einem bestimmten OS laufen.
Besser ist es, wenn du hier zur Lafzeit prüfst welches OS grad vorhanden ist und dann jeweils unterschiedliche Varianten verwendest. |
AW: Compilerschalter/logik: Vista oder höher
Wieso, er kann es doch mit Compilerschalter realisieren :
Delphi-Quellcode:
So kann man das Programm jetzt für VISTA oder höher kompilieren. Wenn man es für XP kompilieren will, so entfernt man einfach einfach die DEFINE-Zeile.
{$DEFINE VISTA}
{ ... } TNewNotifyIconData = 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 {$IFDEF VISTA} guidItem : TGUID; hBalloonIcon : HICON; {$ENDIF} end; |
AW: Compilerschalter/logik: Vista oder höher
Naja, wenn er auf XP compiliert klappts ja auf Vista nicht.
Er will ja sicher nicht 2 verschiedene EXE-Files ausliefern, ist ja auch unnötig in diesem Fall. |
AW: Compilerschalter/logik: Vista oder höher
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:
Nur leider brauch ich jetzt auch zwei Variablen. Einmal vom Typ "TXPNotifyIconData" und eines vom Typ "TVistaNotifyIconData"
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;
Delphi-Quellcode:
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.
private
{ Private-Deklarationen } //Komponenten-Variablen IconData_XP : TXPNotifyIconData; IconData_Vista : TVistaNotifyIconData; 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; |
AW: Compilerschalter/logik: Vista oder höher
Ja, wie ich bereits geschrieben habe. cbSize abhänging des OS setzen.
Ist hier übrigends nachzulesen: ![]() |
AW: Compilerschalter/logik: Vista oder höher
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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