![]() |
AW: OpenDirDialog
:? 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.
|
AW: OpenDirDialog
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. |
AW: OpenDirDialog
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; |
AW: OpenDirDialog
Kleines Update.
05.10.2010 - Build 15
|
AW: OpenDirDialog
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
Delphi-Quellcode:
im
inherited;
Delphi-Quellcode:
.
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) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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