AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Compilerschalter/logik: Vista oder höher
Thema durchsuchen
Ansicht
Themen-Optionen

Compilerschalter/logik: Vista oder höher

Ein Thema von Helmi · begonnen am 15. Sep 2011 · letzter Beitrag vom 16. Sep 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

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

Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 19:54
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.
mfg
Helmi

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

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 19:57
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?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 20:01
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
mfg
Helmi

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

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 20:05
Du musst ja cbSize setzen, Du könntest dort einfach, wenn das aktuelle OS XP ist, cbSize := SizeOf(Record)-SizeOf(GUID)-SizeOf(HICON) setzen.
Lars
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 21:23
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 22:04
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#7

AW: Compilerschalter/logik: Vista oder höher

  Alt 15. Sep 2011, 22:34
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.
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Compilerschalter/logik: Vista oder höher

  Alt 16. Sep 2011, 14: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
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#9

AW: Compilerschalter/logik: Vista oder höher

  Alt 16. Sep 2011, 14:15
Ja, wie ich bereits geschrieben habe. cbSize abhänging des OS setzen.

Ist hier übrigends nachzulesen:

MSDN NotifyIconData
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Compilerschalter/logik: Vista oder höher

  Alt 16. Sep 2011, 15:49
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!
mfg
Helmi

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


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 04:51 Uhr.
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