![]() |
In SaveDialog anderer Anwendung werte ändern nonVCL
Hallo,
habe folgendes Problem, öffne ein Programm, öffne dort den SaveDialog editiere Dateiname und Typ. Ich habe dafür diesen Quelltext verwendet nur übernimmt der SaveDialog die Änderungen nicht. Wo könnte da der Fehler liegen?
Delphi-Quellcode:
Gruß Thomas
var tmpDlg, tmpDlgI: HWND; t: array[0..MAX_PATH] of Char; SPs2: String;
... tmpDlg := FindWindow('#32770', 'Save Extended Bitmap'); if tmpDlg > 0 then begin tmpDlgI := GetDlgItem(tmpDlg, 1152); if tmpDlgI > 0 then begin StrCopy(t, PChar(SPs2)); SendDlgItemMessage(tmpDlg, 1152, WM_SETTEXT, 0, Integer(@t)); SendDlgItemMessage(tmpDlg, 1152, EM_SETMODIFY, Integer(True),0); t := 'DXT3'; tmpDlgI := GetDlgItem(tmpDlg, 1136); SendDlgItemMessage(tmpDlg, 1136, CB_SELECTSTRING, -1, Integer(@t)); PostMessage(tmpDlg, WM_COMMAND, makewparam(1136,CBN_SELCHANGE), Integer(@tmpDlgI)); PostMessage(tmpDlg, WM_COMMAND, makewparam(1,BN_CLICKED), 0); end; // Items end end; // Dlg end ... |
Re: In SaveDialog anderer Anwendung werte ändern nonVCL
Ich sende mit folgendem Code einen text an ein Edit diesem Dialog.
Delphi-Quellcode:
oder war's :gruebel:
SendMessage(tmpDlgI, WM_SETTEXT, 0, LongInt(PChar(SPs2)));
Delphi-Quellcode:
Aber mal 'ne Frage, wo hast'n die ID her, bin selber gerade auf der Suche danach.
SendMessage(tmpDlgI, WM_SETTEXT, Length(SPs2), LongInt(PChar(SPs2)));
|
Re: In SaveDialog anderer Anwendung werte ändern nonVCL
Hallo himitsu,
Die Resursen des SaveDialog, OpenDialog usw. befinden sich in der Datei comdlg32.dll dort bekommst die ID's dann her. Was den Fehler betrifft der dürfe nicht hier in den oberen Zeilen liegen:
Delphi-Quellcode:
da die Datei nachher auch unter dem Dateinamen gespeichert wird der im Edit eingetragen wurde.
SendDlgItemMessage(tmpDlg, 1152, WM_SETTEXT, 0, Integer(@t));
Ich würde sagen der Fehler müsste hier in diesen Zeilen sein:
Delphi-Quellcode:
Der Eintrag DXT3 wird zwar in der Klappliste übernommen aber der Opendialog bemerkt die Änderung nicht und speichert unter dem Format was nach dem öffnen des Dlg's ausgewählt war.
SendDlgItemMessage(tmpDlg, 1136, CB_SELECTSTRING, -1, Integer(@t));
PostMessage(tmpDlg, WM_COMMAND, makewparam(1136,CBN_SELCHANGE), Integer(@tmpDlgI)); Hatte es zwischenzeitlich anders gelöst und zwar mit Mouse Events. da ich eine menge Dateien in einem Anderem Dateiformat speichern musste. Nur sollte man dann die Maus nicht mehr bewegen am Bildschirm. :) Wäre echt gut wenn mir jemand noch sagen könnte wo da der Fehler liegt. Gruß Thomas |
Re: In SaveDialog anderer Anwendung werte ändern nonVCL
Also ich sende per (hab nachgeguckt):
Delphi-Quellcode:
Was dein Auswahl angeht:
S=String
SendMessage(H, WM_SETTEXT, 0, Integer(S)); Ich kenn mich leider noch nicht so mit ComboBoxen aus ... mine eigene ComboBox sieht ja noch nichtmal wie eine ComboBox (nonVCL) aus. :cry: (das rechte/unter Eingabefeld im SaveDialog - anderer Thread) Aber zumindestens hatte ich jetzt auch schon selber die ID's rausbekommen :mrgreen: (steht auch drüben) Aber soweit ich weiß, wird das ausgewählte sofort in die TOpenFilename-Struktur eingetragen, es wird also nicht erst am Ende ausgelesen, daher geh ich mal davon aus, daß du zwar den wert änderst, aber keine Änderungsbotschaft an den Explorer-Hook gesendet wird. Ich würde also mal empfehlen, daß u nachsiehst, welche Änderungsmitteilung gesendet wird, nachdem in User die Einstellung im Feld ändert,´dann bräuchtest du doch nur noch diese Nachricht selber senden, nachdem du den Text geändert hast. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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