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 In SaveDialog anderer Anwendung werte ändern nonVCL (https://www.delphipraxis.net/60617-savedialog-anderer-anwendung-werte-aendern-nonvcl.html)

ts_abc 10. Jan 2006 05:17


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:
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
...
Gruß Thomas

himitsu 21. Apr 2006 11:00

Re: In SaveDialog anderer Anwendung werte ändern nonVCL
 
Ich sende mit folgendem Code einen text an ein Edit diesem Dialog.

Delphi-Quellcode:
SendMessage(tmpDlgI, WM_SETTEXT, 0, LongInt(PChar(SPs2)));
oder war's :gruebel:
Delphi-Quellcode:
SendMessage(tmpDlgI, WM_SETTEXT, Length(SPs2), LongInt(PChar(SPs2)));
Aber mal 'ne Frage, wo hast'n die ID her, bin selber gerade auf der Suche danach.

ts_abc 22. Apr 2006 14:27

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:
SendDlgItemMessage(tmpDlg, 1152, WM_SETTEXT, 0, Integer(@t));
da die Datei nachher auch unter dem Dateinamen gespeichert wird der im Edit eingetragen wurde.

Ich würde sagen der Fehler müsste hier in diesen Zeilen sein:
Delphi-Quellcode:
SendDlgItemMessage(tmpDlg, 1136, CB_SELECTSTRING, -1, Integer(@t));
PostMessage(tmpDlg, WM_COMMAND, makewparam(1136,CBN_SELCHANGE), Integer(@tmpDlgI));
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.

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

himitsu 23. Apr 2006 18:42

Re: In SaveDialog anderer Anwendung werte ändern nonVCL
 
Also ich sende per (hab nachgeguckt):
Delphi-Quellcode:
S=String

SendMessage(H, WM_SETTEXT, 0, Integer(S));
Was dein Auswahl angeht:
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 15:29 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