Grazie,
Ma vorrei capire se le TOpenDialog e le TSaveDialog sono Modali.
Sinceramente non riesco a renderle modali.
Ciao
function ApriSaveDialog: ShortString;
var
Dlg: TFileDialog;
begin
Result := '';
Dlg := TSaveDialog.Create(nil);
try
Dlg.DefaultExt := 'txt';
Dlg.Filter := '*.txt';
if Dlg.Execute then
Result := Dlg.FileName
else
Result := '';
finally
FreeAndNil(Dlg);
end;
end;
function ApriOpenDialog: ShortString;
var
Dlg: TFileDialog;
begin
Result := '';
Dlg := TOpenDialog.Create(nil);
try
Dlg.DefaultExt := 'txt';
Dlg.Filter := '*.txt';
if Dlg.Execute then
Result := Dlg.FileName
else
Result := '';
finally
FreeAndNil(Dlg);
end;
end;
Per essere modale, una qualsiasi finestra, deve sapere chi è l'applicazione che la sta eseguendo.
Dlg := TOpenDialog.Create(nil);
Gli stai togliendo la possibilità di diventare modale se metti un nil come "owner". Non riesce a risalire all'applicazione in questa maniera.
Devi trovare il modo di ottenere quella che in c++ viene passato come hInstance al winmain.
Poi procediamo con gli altri passi.
ps: essendo una dll quella che stai creando tu (vado a memoria) la cosa diventa un attimino più ingarbugliata, ma cerca nella documentazione.
Stilgar
Allora, ho fatto una piccola indagine.
DLLProc su FreePascal è un casino.
C'è parecchia gente che si lamenta nel porting da Delphi a Lazarus.
Cambiamo approccio.
library project1;
{$mode objfpc}{$H+}
uses
Classes,
Windows,
Forms, Interfaces, InterfaceBase, FormProva;
var
HInstance : THANDLE;
begin
HInstance:= GetModuleHandle(nil);
WidgetSet.AppHandle:= HInstance;
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Form1.ShowModal;
end.
Prova a vedere se questo codice di boostrap della dll può esserti d'aiuto.
Si basa sul fatto che "GetModuleHandle(nil)" resituisca l'handle dell'eseguibile e non della dll.
FormProva è una form a caso, se ne hai ...
Stilgar
EDIT :
bootstrap e non boostrap ;)
Stilgar