|
Antwort |
Beschreibung
Für die Auswahl eines Verzeichnisses findet man viele ähnliche Quelltexte, welche ShBrowseForFolder und BrowseInfo verwenden. Dabei hatte ich unter Win2000 immer das Problem mit dem Einstellen der Größe, der Position und ob der Button "Neuer Ordner" angezeigt wird. Das bedeutet, der Button wurde nur angezeigt, wenn das Flag für die NewGUI gesetzt wurde, dann konnte jedoch die Größe nicht eingestellt werden. Die Positionierung habe ich gar nicht hinbekommen. Vermutlich werden die meisten die Komponente nicht benötigen. Mir geht es allerdings mehr darum, ein paar Verbesserungsvorschläge zu bekommen. Die Komponente erstellt ein TForm und setzt dessen Caption. Auf dem Formular befindet sich ein Verzeichnisbaum. Dieser wurde bis Build 9 in einem TShellTreeView dargestellt. Ab Build 10 wird der TPathExplorer (eine Erweiterung des FileExplorer) verwendet. Der TPathExplorer zeigt auch bei nicht unicodefähigen Delphi Widestrings an. Darunter befinden sich Button für OK und Abbruch. Mit "F5" werden die Unerordner des markierten Ordners neu eingelesen. Bis Build 12 konnte man mit der Taste "Einf" den "Neuer Ordner"-Dialog auch ohne entsprechende Option aufrufen und mit "Entf" Ordner löschen. Der Dialog bietet weiterhin diese Optionen:
Hinweis Die aktuelle Version läuft unter Turbo Delphi. Da es nicht unicodefähig ist, werden in der Demo für bestimmte Komponenten die TNT Hack Controls von Himitsu verwendet. Ein direktes Einbinden der TNT Controls sollte ebenfalls funktionieren. Ab Delphi 2009 können die Tnt (Hack) Controls auch aus den uses entfernt werden. In der Demo war es notwendig, die Schriftart der Edits auf Tahoma zu ändern, damit Unicode richtig dargestellt wurde. Unter Delphi 7 funktioniert die Komponente derzeit nur bis Build 9 a. Demo In der Demo wird die Komponente dynamisch eingebunden. D.h. die Unit gfOpenDirDlg wurde zum Projekt hinzugefügt und in die uses eingetragen. In der Procedure, in welcher der Dialog benötigt wird, wird eine Variable vom Typ TOpenDirDialog deklariert, die Class erstellt und wieder freigegeben. Für Delphi ohne Unicode, wie dem von mir für die Demo verwendeten Turbo Delphi, werden Unicodekomponenten benötigt. Die Demo verwendet, da die TNT Controls nicht in Turbo Delphi Explorer installiert werden können, die oben bereits erwähnten TNT Hacks von Himitsu. Diese sind in der Demo nicht enthalten. Sie müssen noch hinzugefügt und in den Suchpfad des Projektes eingetragen werden (TntHack und TntHack\Sources). Eigenschaften ab Build 10
Delphi-Quellcode:
Eigenschaften bis Build 9
Caption : String;
Fontname : String; Title : WideString; Root : String; InitialDir : WideString; Path : WideString; Height : Integer; Left : Integer; Top : Integer; Width : Integer; Position : TPosition; Options : TOpenDirOptions;
Delphi-Quellcode:
InitialDir wird gesetzt und Path ist die Rückgabevariable.
Caption : String;
Title : String; Fontname : String; Root : String; InitialDir : String; Path : String; Height : Integer; Left : Integer; Top : Integer; Width : Integer; Position : TPosition; Options : TOpenDirOptions; Siehe ebenfalls Bild "odd.png" unten. Historie 05.10.2010 - Build 15
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof Geändert von Garfield ( 5. Okt 2010 um 14:36 Uhr) |
Delphi XE5 Professional |
#51
Ein Teil Unicode muss schon enthalten sein. Zumindest sind einige Konstanten und Funktionen bereits in D7 enthalten bzw. bekannt. Muss morgen mal weitersehen. Ich will es ja am liebsten in nonVCL weitermachen, aber das will nicht so ganz.
|
Zitat |
Delphi 12 Athens |
#52
Wenn man selber Messages verschickt und dort der "Text" nur als zusätzlicher/unabhängiger Parameter mit übergeben wird, dann passiert nichts,
aber wenn man TextMessages nutzt, bei welchen explizit Text angegeben wird, dann wird dieses in Delphi 7, durch die Ansi-WinAPI, nach ANSI übersetzt. Vielleicht hilft es dir ja etwas:
Delphi-Quellcode:
Ich nutzte diesen Code allerdings selber nur mit Char/PChar/String und weiß jetzt nicht, ob er auch in Delphi 7 läuft.
Uses Windows, Messages, ActiveX, ShlObj;
Type TFolderRec = Record Title, Caption, Folder: PWideChar; End; PFolderRec = ^TFolderRec; Function FolderCallback(Dlg: HWND; Msg: LongWord; LParam: Pointer; Data: PFolderRec): LongWord; StdCall; Var Temp: Array[0..MAX_PATH-1] of WideChar; Begin Case Msg of BFFM_INITIALIZED: Begin If Data^.Title <> nil Then SendMessageW(Dlg, WM_SETTEXT, 0, Integer(Data^.Title)); If Data^.Folder <> nil Then SendMessage(Dlg, BFFM_SETSELECTION, LongInt(True), Integer(Data^.Folder)); End; BFFM_SELCHANGED: Begin SHGetPathFromIDListW(PItemIDList(LParam), @Temp); If SendMessageW(Dlg, BFFM_SETSTATUSTEXT, 0, LongWord(@Temp)) = 0 Then SetWindowTextW(GetDlgItem(Dlg, 14146), PWideChar(WideString(Data^.Caption) + sLineBreak + sLineBreak + Temp)); End; BFFM_VALIDATEFAILED: Begin Result := 1; Exit; End; End; Result := 0; End; Function BrowseForFolder(Wnd: HWND; Const Title, Caption, PreSelectedFolder: WideString; AllowNewFolder: Boolean; Var SelectedDir: WideString): Boolean; Var BI: TBrowseInfo; FolderRec: TFolderRec; pidlResult: PItemIDList; Temp: Array[0..MAX_PATH-1] of WideChar; Malloc: IMalloc; Begin Result := False; ZeroMemory(@BI, SizeOf(TBrowseInfo)); BI.hwndOwner := Wnd; BI.lpszTitle := PWideChar(Caption); BI.ulFlags := BIF_STATUSTEXT {or BIF_NEWDIALOGSTYLE} or BIF_SHAREABLE or BIF_RETURNONLYFSDIRS; BI.lpfn := @FolderCallBack; BI.lParam := Integer(@FolderRec); If not AllowNewFolder Then BI.ulFlags := BI.ulFlags or BIF_NONEWFOLDERBUTTON; FolderRec.Title := PWideChar(Title); FolderRec.Caption := PWideChar(Caption); FolderRec.Folder := PWideChar(PreSelectedFolder); pidlResult := SHBrowseForFolderW(BI); If pidlResult = nil Then Exit; If SHGetPathFromIdListW(pidlResult, @Temp[0]) Then Begin Result := True; SelectedDir := Temp; End; If SHGetMalloc(Malloc) = S_OK Then Try Malloc.Free(pidlResult); Finally Malloc := nil; End; End; In TDE lief er zwar auch als UnicodeVersion, aber das hat ja nicht viel zu sagen. Wie gesagt, bei sowas wie SendMessage+WM_SETTEXT und SetWindowText mußt du aufpassen, da diese nach Ansi übersetzt werden könnten. Geändert von himitsu (30. Aug 2010 um 08:24 Uhr) |
Zitat |
Delphi XE5 Professional |
#53
Unter Turbo Delphi wird der Text so zugewiesen:
Delphi-Quellcode:
Unter Delphi 7 hat man dann einen leeren Eintrag und muss Node.Text in einen String umwandeln, damit man einen Text bekommt.
TVN_GETDISPINFOW:
with PTVDispInfoW(NMHdr)^ do begin Node := GetNodeFromItem(item); if Node <> nil then begin if (item.mask and TVIF_TEXT) <> 0 then lStrCpyNW(item.pszText, PWideChar(Node.Text), item.cchTextMax - 1); if (item.mask and TVIF_IMAGE) <> 0 then begin GetImageIndex(Node); item.iImage := Node.ImageIndex; end; if (item.mask and TVIF_SELECTEDIMAGE) <> 0 then begin GetSelectedIndex(Node); item.iSelectedImage := Node.SelectedIndex; end; end; end; |
Zitat |
Delphi XE5 Professional |
#54
Kleines Update.
05.10.2010 - Build 15
|
Zitat |
Delphi XE Enterprise |
#55
Die Komponente unterstützt anscheinend Delphi XE nicht.
Ich kann sie installieren aber auf die Oberfläche lässt es sich nicht ziehen.
Code:
habe ich schon hinzugefügt.
// Delphi XE
{$ifdef VER220} {$define DELPHI_10_UP} {$define DELPHI_9_UP} {$define DELPHI_7_UP} {$endif} edit: keiner eine Idee? So, ich hab nicht dem Problem nochmal angenommen. Was bei mir hilft ist ein inherited; im constructor . Ist zwar schon besser als der alte W*-Kram, aber immer noch nicht das was ich haben will. --> Win7 -> Rechtsklick(Taskleiste) -> "Neue Symbolleiste..." Ich hab mich schon wund gesucht (wohl auch wegen dem verschwundenen Plus Operator in google). Ich kann einfach keine Möglichkeit finden (noch nicht mal für andere Sprachen) Geändert von David Martens ( 4. Jan 2012 um 14:08 Uhr) |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |