![]() |
Wahlweise Resource einbinden / Abfrage mit if then else
Ich nochmal:
Habe gerade den tollen Code gefunden, wo man alle VCL-Komp. in XP-Style darstellen kann. Ich füge dafür halt einfach die Resource ein:
Delphi-Quellcode:
Jetzt möchte ich aber das der Nutzer selber entscheiden darf, ob diese geladen werden darf oder nicht. Ich hatte mir das so gedacht:
{$R DESIGN.RES}
Delphi-Quellcode:
Is aber leider nicht so. Er lädt sie in jedem Fall. Was kann ich dagegen tun? Wie kann ich das realisieren???
if MessageDlg('XP Style?',mtConfirmation, [mbYes,mbNo],0) = mrYes then {$R DESIGN.RES}
ThX im vorraus. |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Moin!
Gute Idee, aber ein grundsätzliches Problem: Die {$x } sind Compiler Anweisungen - das bedeutet der Compiler wertet diese beim compilieren aus und verhält sich entsprechend der Option - und der Compiler interpretiert keinen Code. Mit anderen Worten: Dem Compiler ist die IF Anweisung egal - darum kümmert er sich nicht, wenn er die Resource einbindet und umgekehrt: Wenn die IF Anweisung ausgeführt wird, dann ist die Resource schon in der EXE enthalten, da der Compiler schon fertig. Ausserdem, das was du mit der RES Datei da in deine EXE hinzufügst wird direkt von Windows XP ausgelesen und beim Start deines Programmes bekommt dieses eine andere DLL untergeschoben, die dann das XP Aussehen durchdrückt... MfG Muetze1 |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
also gibt es keine möglichkeit??? das is ja mies... :cry:
|
Re: Wahlweise Resource einbinden / Abfrage mit if then else
gibt es keine abfrage die der compiler versteht? compilerabfragen o.ä.???
|
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Moin!
Doch, auch der Compiler (eigentlich wäre es bei C z.B. der Präprozessor der das interpretiert/verarbeitet) kennt IF Abfragen:
Delphi-Quellcode:
Die Zeile Code wird nur compiliert (also kommt nur in die EXE), wenn die EXE auf WIN32 bzw. für WIN32 compiliert wird. Aber du kannst da keinen MessageDialog einbinden. Du solltest lieber in die Richtung suchen die RES Datei einzubinden und schauen ob die WinAPI einen Möglichkeit bietet für dein Programm den Style auszuschalten (was ich nicht glaube, da die DLL beim starten des Programms dir untergeschoben wird von Windows und er nach dem Laden schlecht die DLL entfernen, eine neue Laden und die Verbindungen zu allen Objekten wiederherstellen kann).
{$IFDEF WIN32}
Code {$ENDIF} MfG Muetze1 |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Mh zur Laufzeit gibt es nur eine sehr komplizierte Lösung und zwar müsstest du die Ressourcen des eigenen Programms editieren, in etwa sieht das so aus:
Programmstart Abfrage umbenennen der eigenen exe kopieren der umbenannten datei auf die exe umeditieren der ressourcen (rein/raus) start der exe (mit parametern) selbst beenden gestartete exe muss umbenannte datei löschen Ob das lohnt? ;) |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Du kannst das auch (unschön) so lösen, dass die Ressource nicht ins Programm eingebunden wird, sondern der XP-Style als ".manifest"-Datei mitgeliefert wird. (Programm: beispiel.exe --> XP-Stil: beispiel.exe.manifest) Was in der manifest-Datei stehen muss, dürfte in der OH zu finden sein.
Und die IF-Abfrage bennent dann die Datei halt um oder löscht/erzeugt sie - jeweils nach Wunsch des Benutzers. Auch nicht die sauberste Lösung, aber einfacher als an der exe selber rumzuschrauben ;) Gruß Stephan edit: siehe auch ![]() |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Moin!
Damit er aber die Manifest Datei oder die Resourcen bearbeiten kann, muss ein Code laufen - also die EXE selber. Und wenn die läuft, dann ist der Zeitpunkt wo Windows die Manifestdatei auswerten (bzw. das Manifest in der EXE) schon vorbei. MfG Muetze1 |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Dann muss man nach dem Ändern der Einstellungen (und umbenennen/löschen...) halt das Prog neu starten..
Oder reicht das nicht? Stephan |
Re: Wahlweise Resource einbinden / Abfrage mit if then else
Ja is doch mal ganz einfach!!! Danke für die Hilfe. Das klappt doch wunderbar! :P
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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