jak zrobić by OpenDialog pojawiał się kilkanaście pikseli niżej?
Ej, popatrzyłeś Ty w ogóle w helpa? .. nie wydaje mi się.
Jest tam zapewne coś jak OpenDialog.Position... czy podobnie.
a to ciekawe, rzeczywiście ciężko jest przestawić opendialog-a. U mnie nawet debugowanie nie pomogło, wymiękłem po 30 minutach. Jeśli ktoś da sobie z tym radę to z ciekawości chciałbym się zapoznać ze sposobem.
P.S. W ostateczności można sobie samemu zrobić takiego dialoga i nim ruszać :)
nie wydaje mi sie żeby OpenDialog w VCL posiadał normale mechanizmy ustawiania pozycji początkowej. Dodatkowym problemem jest to, że okno dialogowe jest modalne, czyli bez zabawy w wątki nie da sie niczego zmienić "w trakcie" OpenDialog.Execute. Ale zawsze można sprobowac komunikatami:
//...
const WM_AFTERSHOW = WM_USER + 2856;
type
TForm1 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure OpenDialog1Show(Sender: TObject);
private
{ Private declarations }
public
procedure OnAfterShow(var Msg : TMessage); message WM_AFTERSHOW;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;
procedure TForm1.OnAfterShow(var Msg: TMessage);
begin
SetWindowPos(FindWindow(nil, 'Otwieranie'), 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);
end;
procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
PostMessage(Handle, WM_AFTERSHOW, 0, 0);
end;
//...
Takie rozwiązanie ma przynajmniej jedną wade :/. Widać, że po pokazaniu okno przesuwa sie ono na jakąs pozycje. Nie gwarantuje że nie da sie tego zrobić prosciej i bardziej elegancko (np. lepiej wyszukiwać po klasie i po nazwie okna), w kazdym razie takie coś działa :) .
Hmmm.... Być może się mylę, ale TOpenDialog ma pole Handle, więc nie trzeba chyba "ręcznie" szukać okna...
Tylko, o ile pamiętam, żeby mieć właściwe okienko dialoga, trzeba wziąć parenta od topendialog.handle.