AW: TaskDialogIndirect in einer 64bit Anwendung
Delphi-Quellcode:
so?
begin
CheckCommonControl( // oder IF not InitCommonControl(...) THEN Error... ICC_LISTVIEW_CLASSES or ICC_TREEVIEW_CLASSES or ICC_BAR_CLASSES or ICC_TAB_CLASSES or ICC_UPDOWN_CLASS or ICC_PROGRESS_CLASS or ICC_HOTKEY_CLASS or ICC_ANIMATE_CLASS or //ICC_WIN95_CLASSES or ICC_DATE_CLASSES or ICC_USEREX_CLASSES or ICC_COOL_CLASSES or ICC_INTERNET_CLASSES or ICC_PAGESCROLLER_CLASS or ICC_NATIVEFNTCTL_CLASS or ICC_STANDARD_CLASSES or ICC_LINK_CLASS ); // wobei natürlich nur die wirklich benötigten Klassen initialisiert werden wüssten tdiMessageDialog('Anwendungsname', 'Nachricht', 'Nachrichtentext', '<a href="http://www.delphipraxis.net">Delphi-PRAXiS</a>', '', TD_ERROR_ICON, nil, TDCBF_OK_BUTTON, '', ID_OK, TDF_EXPANDED_BY_DEFAULT, 0); //Handle end. Es sei denn die VCL Läd/Initialisiert noch was Anderes, daß du ohne VCL ebenfalls noch machen musst. (hab da aber, an den wichtigsten Stellen, nichts gesehn) |
AW: TaskDialogIndirect in einer 64bit Anwendung
So nochmal eine kurze Rückmeldung:
Der Fehler saß jetzt tatsächlich vor dem Rechner. :( Ich weiß nicht warum, aber aus irgendwelchen Gründen waren die Laufzeithemes bei der 64bit-Version in den Projektoptionen verstellt. Nachdem ich alle Projektoptionen neu gesetzt habe, reicht tatsächlich der Aufruf von
Delphi-Quellcode:
aus. Ein Aufruf con
InitCommonControls;
Delphi-Quellcode:
der ja auch wieder zur VCL gehört, ist somit nicht notwendig.
CheckCommonControl
Danke nochmal an jaenicke und himitsu die sich die Mühe gemacht haben sich mit meinem Problem auseinanderzusetzen. |
AW: TaskDialogIndirect in einer 64bit Anwendung
Zitat:
|
AW: TaskDialogIndirect in einer 64bit Anwendung
InitCommonControls hat keinen Rückgabewert, aber InitCommonControlsEx gibt einen Boolean zurück. Ich werde das wohl am besten noch umbauen.
|
AW: TaskDialogIndirect in einer 64bit Anwendung
Nicht? :gruebel: (hatte da jetzt die API nicht angeguckt)
Dann will ich jetzt lieber nicht wissen, was InitCommonControl und CheckCommonControl macht. Soweit ich gesehn hab, ruft CheckCommonControl das InitCommonControl auf. Und InitCommonControl wendet sich dann an InitCommonControls und wenn das nicht geht (es False zurückgibt), an InitCommonControlsEx .... dachte ich zumindestens so gesehn zu haben. [add] Stimmt. Aber das hättest du sowieso umstellen müssen. Zitat:
|
AW: TaskDialogIndirect in einer 64bit Anwendung
Ich bin grade dabei, aber welchen ICC-Wert muß ich für die Taskdialoge verwenden? :gruebel:
|
AW: TaskDialogIndirect in einer 64bit Anwendung
Im Notfall kann mehr nicht schaden. Dauert theoretisch nur bissl länger, beim Laden/Initialisieren.
http://msdn.microsoft.com/en-us/libr.../bb775507.aspx Es kommt wohl darauf an, was alles in dem Dialog verwendet wird. Wenn ich mir die Liste so anseh, dann sieht es so aus, als wenn mindestens 50% der genannten Dinge nicht benötigt werden. (Animate, Cool, Data, Internet, ListView, Progress, TreeView, UpDown) |
AW: TaskDialogIndirect in einer 64bit Anwendung
Wenn ich das MSDN richtig verstehe, müsste InitCommonControlsEx True zurückgeben wenn es die Controls initialisieren konnte. Bei folgenden Code erscheint aber immer die Messagebox obwohl der Taskdialog danach angezeigt wird. :gruebel:
Delphi-Quellcode:
var
ICC : TInitCommonControlsEx = ( dwSize : SizeOf(TInitCommonControlsEx); dwICC : ICC_LISTVIEW_CLASSES or ICC_TREEVIEW_CLASSES or ICC_BAR_CLASSES or ICC_TAB_CLASSES or ICC_UPDOWN_CLASS or ICC_PROGRESS_CLASS or ICC_HOTKEY_CLASS or ICC_ANIMATE_CLASS or ICC_DATE_CLASSES or ICC_USEREX_CLASSES or ICC_COOL_CLASSES or ICC_INTERNET_CLASSES or ICC_PAGESCROLLER_CLASS or ICC_NATIVEFNTCTL_CLASS or ICC_STANDARD_CLASSES or ICC_LINK_CLASS ); begin if not InitCommonControlsEx(ICC) then begin MessageBox(0, 'InitCommonControlsEx!', 'Fehler', MB_OK or MB_ICONSTOP); //Halt; end; |
AW: TaskDialogIndirect in einer 64bit Anwendung
Vermutlich wurden nicht Alle und vorallem eine der der anderen (von dir ungenutzen) Klasse nicht initialisiert?
|
AW: TaskDialogIndirect in einer 64bit Anwendung
Scheinbar muß
Delphi-Quellcode:
trotzdem aufgerufen werden, sonst gibt
InitCommonControls
Delphi-Quellcode:
immer False zurück obwohl der anschliessende Aufruf vom Taskdialog funktioniert.
InitCommonControlsEx
Ich meine auch in den letzten Tagen bei der Lösungsrecherche etwas gelesen zu haben das es diesbezgl. mal einen Bug in der (Winapi.)CommCtrl.pas gegeben hat oder vielleicht sogar noch gibt. Jedenfalls sieht der funktionierende Code jetzt so aus:
Delphi-Quellcode:
[EDIT]
var
ICC : TInitCommonControlsEx = ( dwSize : SizeOf(TInitCommonControlsEx); dwICC : ICC_STANDARD_CLASSES); . . . InitCommonControls; if not InitCommonControlsEx(ICC) then begin MessageBox(0, 'InitCommonControlsEx!', 'Fehler', MB_OK or MB_ICONSTOP); Halt; end; . . . Ich habe den Link wiedergefunden: http://www.entwickler-ecke.de/topic_...ug_5384,0.html Allerdings habe ich jetzt nicht mehr nachgeprüft ob das immer noch so implementiert ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 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