Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi IFileDialog mit Delphi 7 (https://www.delphipraxis.net/166093-ifiledialog-mit-delphi-7-a.html)

sundance 30. Jan 2012 09:22


IFileDialog mit Delphi 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte meine Delphiprogramme gerne mit den neuen (Win7/Vista) Datei- und Ordnerdialogen "aufwerten". Zu diesem Thema habe ich auch bei stackoverflow eine entsprechende Unit gefunden (siehe Anhang).

Das Problem ist (nur), dass zum Kompilieren aktualisierte Standard-Units notwendig sind:
Zitat:

The type definitions are not included in the component, but can be found in some newer ShlObj and ActiveX units out there on the net...
Hat jemand eine Idee, wo man diese aktuellen Versionen für D7 finden kann?

.sundance.

P.S. Wie stellt man es an, dass (längere) Code-Segmente standardmäßig "eingeklappt" erscheinen?

edit: Das mit dem Zusammenklappen war hier im Forum gemeint; CODE entfernt und als Anlage hinzugefügt...

himitsu 30. Jan 2012 09:32

AW: IFileDialog mit Delphi 7
 
Zitat:

Zitat von sundance (Beitrag 1148218)
P.S. Wie stellt man es an, dass (längere) Code-Segmente standardmäßig "eingeklappt" erscheinen?

In D7 standardmäßig garnicht.
Und wenn doch, dann muß man mal schauen ob sich das bei der gnutzten Fremdkomponente einstellen läßt. (ich glaub CnPack kann sowas ... zumindestens das einklappen)

Ab spätestens 2010 kennt Delphi
Delphi-Quellcode:
{$REGION 'xyz'}...{$ENDREGION}
(ich hoff' das ist jetzt richtog geschrieben), welches Delphi standardmäßig eingeklappt darstellt.

Luckie 30. Jan 2012 09:48

AW: IFileDialog mit Delphi 7
 
Zitat:

Zitat von himitsu (Beitrag 1148220)
Zitat:

Zitat von sundance (Beitrag 1148218)
P.S. Wie stellt man es an, dass (längere) Code-Segmente standardmäßig "eingeklappt" erscheinen?

In D7 standardmäßig garnicht.

Ich glaube, er meint hier im Form, nach dem er gemerkt hat, dass es nicht so toll ist mehrere hundert Zeilen Code zu posten, er abe rnoch nicht entdeckt hat, dass man Dateien auch anhängen kann.

himitsu 30. Jan 2012 09:53

AW: IFileDialog mit Delphi 7
 
Upps, also das geht nicht.
Könnte man ja mal einen Feature-Request für anlegen (falls es den nicht schon gibt)

Wobei das Attachment natürlich schöner ist. (einen gekürzten Header kann man natürlich dennoch zeigen ... ohne "private"-Abschnitte und anderes unwichtiges Zeugs)



Zitat:

Delphi-Quellcode:
aFileDialogEvent:=TFileDialogEvent.Create;
aFileDialogEvent.ParentDialog:=self;
aFileDialogEvent.QueryInterface(IFileDialogEvents,FileDialogEvents);

Es ist nicht wirklich gut, wenn man Interface und Objektzeiger auf das selbe Objekt hält (vorallem nicht bei aktiver Referenzzählung des Interfaces).

Die Variable aFileDialogEvent abschaffen und den ParentDialog als Parameter übergeben.
Delphi-Quellcode:
FileDialogEvents := TFileDialogEvent.Create(Self);


IFileDialog.Advise will ein Interface haben, wieso gibst du ihm dann das Objekt?


Wenn du dir das TOpenOptions-Set bitkompatibel zu den FOS_*-Konstanten ausgelegt hast, dann kannst du dir das ellenlange IF-Konstrukt ersparen, indem du Options direkt in aOptionsSet castest.

sundance 30. Jan 2012 11:31

AW: IFileDialog mit Delphi 7
 
@himitsu:
Wie gesagt, der Quelltext ist nicht von mir, sondern bei stackoverflow gefunden.
Ich habe mir die Details/Probleme der Unit auch noch nicht näher angesehen; mein vorrangiges Ziel war es, sie erstmal "zum Laufen" zu bringen mit den aktualisierten Standardunits.

Offen gestanden habe ich mich bisher auch noch nicht mit Interfaces beschäftigt, von daher kann ich leider auch nicht beurteilen, in wie weit die gefundene Implementierung korrekt ist.

Ich habe unglücklicherweise sonst keinen Implementierungsvorschlag für die neuen Datei- und (besonders) Ordner-Dialoge von Vista/Win7 gefunden, auf denen man aufbauen könnte. Für Dateidialoge (öffnen und speichern) gibt's zwar funktionierende Lösungen, aber zur Auswahl von Ordnern (im Win7-Stil) bin ich bisher noch nicht fündig geworden... (z.B. CommonOpenFileDialog.IsFolderPicker := true)

.sundance.

dummzeuch 1. Mai 2016 18:22

AW: IFileDialog mit Delphi 7
 
Ja, ich weiss, der Thread ist uralt, aber da ich gerade auf diese Unit gestossen bin:

Folgendes ist ein Bugfix fuer auskommentierten Code (der wegen des Bugs auskommentiert wurde):

Delphi-Quellcode:
  {Set FileTypes (either from Filter or FilterArray)}
  if Length(Filter) > 0 then begin
    aStringList := TStringList.Create;
    try
      ParseDelimited(aStringList, Filter, '|');
      i := 0;
      while i <= aStringList.Count - 1 do begin
        SetLength(aFileTypesArray, Length(aFileTypesArray) + 1);
        aFileTypesArray[Length(aFileTypesArray) - 1].pszName :=
          StringToOleStr(aStringList[i]);
        aFileTypesArray[Length(aFileTypesArray) - 1].pszSpec :=
          StringToOleStr(aStringList[i + 1]);
        Inc(i, 2);
      end;
      FileDialog.SetFileTypes(Length(aFileTypesArray), aFileTypesArray);
    finally
      for i := 0 to Length(aFileTypesArray) - 1 do begin
        SysFreeString(aFileTypesArray[i].pszName);
        SysFreeString(aFileTypesArray[i].pszSpec);
      end;
      aStringList.Free;
    end;
Quelle: http://stackoverflow.com/a/14309767/49925

(Noch ungetestet.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 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