Entwickler-Ecke

Windows API - Savedialog erweitern


Gausi - So 10.07.05 17:44
Titel: Savedialog erweitern
Kann man den SaveDialog um ein weiteres Element erweitern? Ich bräuchte in diesem Dialog eine Checkbox, wo man eine Option, die beim Speichern benötigt wird, auswählen kann. Diese Box sollte unter dem Feld sein, wo man den Dateinamen angeben kann.
Ich könnte zwar auch den "Dateitypen-Filter" dafür missbrauchen, halte das aber für unschön. Gibts da ne einfache Möglichkeit?


Moderiert von user profile iconGausi: Topic aus Dateizugriff verschoben am So 10.07.2005 um 21:17 - is ja nun doch eher API als Dateizugriff geworden...


maxk - So 10.07.05 18:21

Hallo,
du kannst mit dem Handle und nonVCL Kenntnissen eine Checkbox erzeugen. Leider kenn ich mich da nicht so aus :oops: Das hier funktioniert schonmal und einen Buttons habe ich auch schon hinbekommen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.SaveDialog1Show(Sender: TObject);
var H:HWND;
begin
 H:=GetParent(SaveDialog1.Handle);
 SetWindowPos(H,0,0,0,570,450,SWP_NOMOVE or SWP_NOZORDER);
end;
Vielleicht hilft dir das erstmal

Gruß,
maxk


Delete - So 10.07.05 19:50

Guck mal hier: http://www.luckie-online.de/Developer/Delphi/Sonstiges/OpenDlg.html ;)


Gausi - So 10.07.05 20:58

Jo, das war so ziemlich genau das, was ich brauchte. Ich musste mich nur noch durch das heissgeliebte MSDN durchwurschteln, um herauszufinden, wie ich aus dem Edit ne Checkbox mache, und dann war die Schrift auch noch etwas merkwürdig, aber so gehts:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TForm1.SaveDialog1Show(Sender: TObject);
var
  hParent: THandle;
  rect: TRect;
  hCbox: THandle;
  hFont: THandle;
begin
  // OpenDialog1.Handle ist irgendwie das falsche :?
  hParent := GetParent(SaveDialog1.Handle);
  // Position und Größe ermitteln
  GetWindowRect(hParent, rect);
  // Dialog vergrößern für CBox
  SetWindowPos(hParent, 000, rect.Right - rect.Left, rect.Bottom - rect.Top
    + 30, SWP_NOMOVE);
  hFont := SENDMESSAGE(hParent,WM_GETFONT,0,0);
  // Edit erzeugen, ID = 101
  hCBox := CreateWindowEx(WS_EX_LEFT, 'BUTTON''Anders speichern', BS_AUTOCHECKBOX OR BS_FLAT OR WS_VISIBLE or WS_CHILD,
    195, rect.Bottom - rect.Top - 3525016, hParent, 1010nil);
  if hCBox = 0 then
    RaiseLastOSError;
  SendMessage(hCBox,WM_SETFONT,hFont,0);
end;

procedure TForm1.SaveDialog1Close(Sender: TObject);
var
  hParent: THandle;
begin
  hParent := GetParent(SaveDialog1.Handle);
  if IsDlgButtonChecked(hParent,101) = BST_CHECKED then
    showmessage('Check')
  else showmessage('No Check')
end;


Tino - Mo 11.07.05 11:31


Delphi-Quelltext
1:
2:
hCBox := CreateWindowEx(WS_EX_LEFT, 'BUTTON''Anders speichern', BS_AUTOCHECKBOX OR BS_FLAT OR WS_VISIBLE or WS_CHILD,
    195, rect.Bottom - rect.Top - 3525016, hParent, 1010nil);

Das nenne ich doch mal einen sehr guten Titel! :mrgreen:


Gausi - Mo 11.07.05 15:57

Naja, im richtigen Programm steht da natürlich anderes. In etwa sowas wie "Pfade mit Laufwerksbuchstaben speichern".
Es ist halt eine Auswahlmöglichkeit, ob die Daten auf die eine oder andere Art gespeichert werden sollen.


Delete - Do 03.06.10 23:37

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Guck mal hier: http://www.michael-puff.de/Programmierung/Delphi/Code-Snippets/OpenDlg.shtml ;)