Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi GetOpenFileNamePreview - unerwartetes Verhalten (https://www.delphipraxis.net/1591-getopenfilenamepreview-unerwartetes-verhalten.html)

Christian Seehase 11. Dez 2002 15:29


GetOpenFileNamePreview - unerwartetes Verhalten
 
Moin Zusammen,

da ich in D5 nicht die "schicken, neuen" Open- und Savedialoge habe, wie sie in D6 schon implementiert sind, wollte ich mir dafür mal Komponenten erstellen.
Da sich die API Aufrufe für die xxxPreview Versionen von denen ohne Preview nicht sonderlich unterscheiden sollen die der Vollständigkeit halber auch mit aufgenommen werden.

Soweit ist das auch alles kein Problem und funktioniert auch.

Beim Aufruf der Preview Versionen ergibt sich nur ein kleines Problem:
Es gibt keinen Preview, ausser es wird der Dialog im Old-Style aufgerufen, dann klappts.
Sobald als Flag OFN_EXPLORER verwendet wird entfällt das Preview Control.

Ich habe auch schon überprüft, dass die richtige Funktion aus der richtigen DLL aufgerufen wird.

Auch wenn ich für den Aufruf der Funktion nur lStructSize, lpstrFilter (=PChar('AVI'#00'*.avi'#00#00)), lpstrFile (=StrAlloc(MAX_PATH)), nMaxFile (=MAX_PATH) und Flags (=OFN_EXPLORER, bzw. OFN_EXPLORER or OFN_ENABLESIZING) setze, und den Rest vorher mit FillChar auf 0 gesetzt habe passiert das gleiche. An der Kompo scheints also nicht zu liegen.
(bei Flags = 0 wird auch hier der Old-Style Dialog korrekt aufgerufen).

Hat jemand eine Idee?

Luckie 11. Dez 2002 15:39

Die Openfilename-Striuktur hat unter WinNT eine andere Größe, siehe PSDK. Eventuell liegt es daran.

Christian Seehase 11. Dez 2002 15:58

Moin Luckie,

danke für den Tip, das hatte ich allerdings schon eingearbeitet bzw. berücksichtigt.
Ich hab's aber eben noch mal ausgetestet.
Wird die Grösse falsch angegeben (unter W2K) lässt er, naheliegender Weise, die PlacesBar weg. FlagsEx liegt ja im erweiterten Bereich.

Luckie 11. Dez 2002 16:03

Hm, hätte mir eigentlich klar sein sollen, dass du daran schon gedacht hast. :?

Mit ist nur nichts besseres eingefallen. :|

Christian Seehase 11. Dez 2002 17:11

Moin Luckie,

ich hätt's ja auch einfach übersehen haben können.
Was mich nur so überrascht:
Mit dem Old-Style Dialog klappts (aber wer will den schon :mrgreen:), nur mit dem heute üblichen nicht.
Auch googeln hat nichts gebracht, und MSDN auch nicht.
Es werden immer nur Beispiele gegeben, wie die Funktion eingebunden und aufgerufen wird, soweit war ich aber schon :?
Nirgends ein Hinweis auf eine Besonderheit für den "neuen Stil". :(

MathiasSimmack 11. Dez 2002 17:45

Ähem ... wo gibt´s diese Komponente, und wann ... Will mal neugierig schnüffeln und auch "neue" Dialoge verwenden. :wink: Die API-Deklaration würde mir auch schon reichen ... :)

Christian Seehase 11. Dez 2002 17:56

Moin Mathias,

nur um's noch mal deutlich zu machen:
Es geht um die Standard Open/Save Dialoge, die man ab D6 in der Komponentenpalette hat.
Die mit der PlacesBar links (Eigene Dateien...)

Das sind die APIs GetOpenFileName und GetSaveFileName.

Als Kompo wird's demnächst zum Test bereitstehen (wenn ich endlich weiss, was es mit diesem #&@%$@!! Preview Control auf sich hat)

MathiasSimmack 11. Dez 2002 18:25

Zitat:

Zitat von Christian Seehase
nur um's noch mal deutlich zu machen:
Es geht um die Standard Open/Save Dialoge, die man ab D6 in der Komponentenpalette hat.
Die mit der PlacesBar links (Eigene Dateien...)

Deutlich genug, Christian. Aber ich hab´s auch schon beim ersten Mal kapiert. Ich schwöre ... :)

Zitat:

Das sind die APIs GetOpenFileName und GetSaveFileName.
Heißt das, ich müsste im PSDK nach ein paar neuen Stilen gucken, und könnte das bereits benutzen?

Christian Seehase 11. Dez 2002 18:34

Moin Mathias,

das sind nur die zwei (vier) Funktionsdeklarationen (mit je einem Parameter), eine Struktur und einige Konstanten.
Vielleicht auch schon vollständig in D5 (Unit Commdlg) deklariert.
(bis auf die Preview Funktionen)
Ich importiere mir die halt lieber selber ;-)

MathiasSimmack 11. Dez 2002 18:40

Falls du die Ergänzung in "OPENFILENAME" meinst:
Code:
#if (_WIN32_WINNT >= 0x0500)
  void *        pvReserved;
  DWORD        dwReserved;
  DWORD        FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
Nein, die sind in Delphi 5 noch nicht vorhanden. Spontan würde ich sagen:
Code:
pvReserved: POINTER;
dwReserved: dword;
FlagsEx: dword;
Richtig? :?

Die "GetOpenFileNamePreview" habe ich zuerst in der COMDLG32.DLL gesucht, bin dann aber in der MSVFW32.DLL fündig geworden? Oder habe ich mich da vertan?

Ansonsten gucke ich mal, welche Konstanten neu sind, dann probiere ich mal, ob ich die Places-Bar zum Leuchten bringen kann.

Oder, falls du´s schneller da hast bzw. in meiner Spontanidee was korrigieren müsstest, wäre ich für einen Fix immer sehr dankbar. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Seite 1 von 3  1 23      

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