Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Compilerschalter/logik: Vista oder höher (https://www.delphipraxis.net/163107-compilerschalter-logik-vista-oder-hoeher.html)

Helmi 15. Sep 2011 18:54

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:
$IfDef Vista_higher
  //Hier ist Code der nur compiliert werden soll wenn das Ding mit Vista läuft.
$endif
Ich hab so was schon mal gesehen, aber leider hab ich jetzt auf der Durchsuche von einigen Codes nichts gefunden.

Sir Rufo 15. Sep 2011 18:57

AW: Compilerschalter/logik: Vista oder höher
 
Zitat:

Zitat von Helmi (Beitrag 1124685)
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:
$IfDef Vista_higher
  //Hier ist Code der nur compiliert werden soll wenn das Ding mit Vista läuft.
$endif
Ich hab so was schon mal gesehen, aber leider hab ich jetzt auf der Durchsuche von einigen Codes nichts gefunden.

Bist du dir sicher, dass du den Code nur dann compiliert haben willst, wenn das Entwicklungssystem mit Vista läuft?
Welchen Sinn macht das? :gruebel:

Helmi 15. Sep 2011 19:01

AW: Compilerschalter/logik: Vista oder höher
 
Oder mal anders gefragt:

Ich habe folgendes Record:
Delphi-Quellcode:
  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;
Die letzten Zwei Einträge
Delphi-Quellcode:
guidItem       : TGUID;
hBalloonIcon   : HICON;
gibts nur ab Vista oder höher, nicht aber bei XP.
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

daywalker9 15. Sep 2011 19:05

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.

himitsu 15. Sep 2011 20:23

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.

RWarnecke 15. Sep 2011 21:04

AW: Compilerschalter/logik: Vista oder höher
 
Wieso, er kann es doch mit Compilerschalter realisieren :
Delphi-Quellcode:
{$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;
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.

daywalker9 15. Sep 2011 21:34

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.

Helmi 16. Sep 2011 13:09

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:
  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;

daywalker9 16. Sep 2011 13:15

AW: Compilerschalter/logik: Vista oder höher
 
Ja, wie ich bereits geschrieben habe. cbSize abhänging des OS setzen.

Ist hier übrigends nachzulesen:

MSDN NotifyIconData

Helmi 16. Sep 2011 14:49

AW: Compilerschalter/logik: Vista oder höher
 
Zitat:

Zitat von daywalker9 (Beitrag 1124862)
Ja, wie ich bereits geschrieben habe. cbSize abhänging des OS setzen.

Ist hier übrigends nachzulesen:

MSDN NotifyIconData

Danke - habs jetzt genau so gemacht und es funktioniert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz