![]() |
Re: Ich finde keine ChildHandles beim TSaveDialog ...
|
Re: Ich finde keine ChildHandles beim TSaveDialog ...
also in meinem D2005 funktionierts. Hier mal die komplette unit:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TWindowproc = function(AHandle: Cardinal; uMsg: Cardinal; AWPARAM: wParam; ALPARAM: lParam): LResult; TForm1 = class(TForm) Button1: TButton; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); procedure SaveDialog1Show(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} var GOldProc: TWindowProc; function NewWindowProc(AHandle: Cardinal; uMsg: Cardinal; AWPARAM: wParam; ALPARAM: lParam): LResult; Stdcall; begin result := GOldProc(AHandle, uMsg, AWParam, ALParam); end; procedure TForm1.SaveDialog1Show(Sender: TObject); begin GOldProc := TWindowProc(SetWindowLong(SaveDialog1.Handle, GWL_WNDPROC, Integer(@NewWindowProc))); end; procedure TForm1.Button1Click(Sender: TObject); begin SaveDialog1.Execute(); end; end. |
Re: Ich finde keine ChildHandles beim TSaveDialog ...
Liste der Anhänge anzeigen (Anzahl: 2)
Ist schon pracktisch solch ein Thema zu finden, welches gleich in doppelter Hinsicht passt :)
eigentlich wollte ich ja erst sowas sagen,
Delphi-Quellcode:
aber inzwischen hat sich hier einiges geändert, bei mir funktionier das mit dem Übersetzen auch ganz gut und ich benötige dafür nur eine Zeile ^^
Ich würde mal versuchen rauszubekommen, wie das z.B. Notepad macht, denn der hat auch seine eigene Beschriftung und ohne das es flackert.
Bei meinem Notepad steht [b]Dateiname[/b] und [b]Dateityp[/b], aber in den originalen Open-/Save-Dialogen steht bei mir [b]Objektname[/b] und [b]Objekttyp[/b] (im SaveDialog allerdings [b]Dateityp[/b] :gruebel: )
Delphi-Quellcode:
Im Brunde bräuchtet ihr euch nur in den ExplorerHook des Dialogs einschalten, bei Msg = WM_NOTIFY und POFNotifyExW(LParam)^.hdr.code = CDN_INITDONE.
SendMessageW(GetDlgItem(hWnd, 1), WM_SETTEXT, 0, Integer(PChar('abc123')));
Oder, wenn's reicht ins onShow-Ereignis (wird über's ExplorerHook aufgerufen). Ich persönlich hab hier meinen eigenen ExplorerHook, daher isses wohl etwas einfacher :mrgreen: Zu dem Handle-Problem: Dat hab'sch aus'm MSDN - das über GetOpenFileName/GetSaveFileName-Fenster enthält seit Win2K/NT vermutlich sowas wie ein Explorer-Fenster, welches wohl jetzt die WindowsMessages an den ExplorerHook versendet, muß also erst das Handle auf das Dialog-Fenster geholt werden. Zitat:
Delphi-Quellcode:
das richtige Fenster, mit den gesuchten Controls, herran.
hWnd := GetParent(hWnd);
Ach ja, hab auch etwas gebraucht und diese Fenster bisher entziffert. (bis auf 0 und 1088 ... keine Ahnug was das ist)
Code:
Und Luckie ... WinSight hilft irgendwie auch nicht viel weiter :gruebel:
#32770 DialogName
0 ? 1 Öffnen-Button 2 Abbrechen-Button 1038 Hilfe-Button 1040 Schreibgeschützt-CheckBox 1088 ? 1089 Typ-Label 1090 Dateiname-Label 1091 SuchenIn-Label 1120 Datei-ListBox 1136 Typ-Edit 1137 SuchenIn-ComboBox 1148 Dateiname-Edit 1184 PlacesBar bei mir hat das nur die beiden SuchenIn-Controls entdeckt :gruebel: (hab dann einfach mal in 'ner Schleife eines per GetDlgItem testen lassen) |
Re: Ich finde keine ChildHandles beim TSaveDialog ...
So, die letzten Contros wurden endlich entschlüsselt :)
Code:
#32770 » DialogName
0 » OpenDialog-ClientBereich 1 » Öffnen-Button 2 » Abbrechen-Button 1038 » Hilfe-Button 1040 » Schreibgeschützt-CheckBox 1088 » Control-Butons (at top-right) 1089 » Typ-Label 1090 » Dateiname-Label 1091 » SuchenIn-Label 1120 » Datei-ListBox 1136 » Typ-Edit 1137 » SuchenIn-ComboBox 1152 » Dateiname-Edit 1184 » PlacesBar |
Re: Ich finde keine ChildHandles beim TSaveDialog ...
Gleiches Problem ... neue Ursache :shock:
Dachte erst ich hätte mich beim Dateiname-Edit (ID 1148) verschrieben, aber als ich jetzt wieder daheim weiterproggen wollte ging es plötzlich nicht mehr (falsche ID), also nochmal gesucht und siehe da, ich hatte es richtig aufgeschrieben nur da ist es die ID 1152 :wall: Also ich hab für das selbe Editfeld bisher 2 IDs (WinXP mit und ohne SP) Wie soll ich denn jetzt vorgehen ... kann ja schließlich nicht alle IDs, für alle Windowsversionen ermitteln und dann die passende verwenden? :stupid: Es ist zwar einfach an alle IDs der vorhanden Controls ranzukommen, aber wie kann ich mit Sicherheit feststellen welche ID welches Control darstellt? |
Re: Ich finde keine ChildHandles beim TSaveDialog ...
Zitat:
Aber zumindestens hab ich inzwischen alles so hinbekommen, daß jetzt die meißten Beschriftungen über ResourceStrings geladen und erfolgreich gesetzt werden (solange die DlgItemIDs stimmen) Drüben der entsprechende QuellCode ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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