No wlasnie
zazwyczaj to sie robi
modalresult := idOK;
a czy mozna jakos zrobic zeby takie okienko zwrocilo rekord?
pozdrawiam
No wlasnie
zazwyczaj to sie robi
modalresult := idOK;
a czy mozna jakos zrobic zeby takie okienko zwrocilo rekord?
pozdrawiam
ShowModal wyświetli okno i zwróci wynik w zależności co nacisnąłeś. Na oknie, które chcesz żeby zwracało wynik musisz ustawić na przyciskach własność ModalResult.
Działasz np. tak:
if Okno.ShowModal = mrOk then ...
W tym wypadku wyświetli okno i zadziała jesli wciśniesz przycisk co ma ModalResult mrOk.
Spróbuj dać modalresult=integer(@rekord), chyba powinno zadziałać.
type
unit unit2;
...
Tfrm = class(TForm)
private
{ Private declarations }
public
Rec: TRec;
{ Public declarations }
end;
...
end.
unit unit1;
...
procedure Button1Click();
var
f: Tfrm;
begin
f := Tfrm.Create(Self);
try
f.ShowModal;
Rec := f.Rec;
finally
FreeAndNil(f);
end;
...
no to już nie jest zwracanie rekordu, tylko odwołanie się do zmiennej public w formie drugiej
ale tak to się chyba powinno robić i to jedyny sposób bo modalresult jest przeznaczone tylko dla sprawdzenia czy kliknięto OK, Anuluj etc.
Adamo napisał(a)
no to już nie jest zwracanie rekordu, tylko odwołanie się do zmiennej public w formie drugiej
wiem,
ale tak to się chyba powinno robić i to jedyny sposób bo modalresult jest przeznaczone tylko dla sprawdzenia czy kliknięto OK, Anuluj etc.
sam sobie odpowiedziałeś na resztę :)
W sumie to jest jescze trochę inny sposób, też niedokładnie to o co chodzi autorowi, ale wywołując formy w ten sposób można sobie życie ułatwić.
type
unit unit2;
...
Tfrm = class(TForm)
private
{ private declarations }
public
{ public declarations }
end;
function Showfrm(AOwner: TComponent; ...): TRec; //jeśli forma jest modalna to normalnie funkcja zwraca typ TModalResult a jeśli niemodalna to Boolean
...
implementation
function Showfrm(AOwner: TComponent; ...): TRec;
var
f: Tfrm;
Rec: TRec;
begin
f := Tfrm.Create(AOwner);
try
f.ShowModal;
//Rec := cos;
Result := Rec;
finally
FreeAndNil(f);
end;
...
end.
unit unit1;
...
procedure TForm1.Button1Click();
begin
Rec := ShowForm(Self, ...);
...
</quote>
Taki sposób wywoływania form ma to do siebie, że
a) można przekazać ile się chce parametrów i przed pokazaniem formy zrobić z nią coś na podstawie tych parametrów
b) całe ustawianie formy przed jej pokazaniem mamy w jednej funkcji
c) no i można zwracać co się chce
I o ile jeśli daną formę wywołujemy tylko w jednym miejscu programu to czy wywołamy (i ustawimy) ją tak, czy w onCreate i\lub po f := Tf.Create() to raczej tyle samo kodu o tyle przy wywołaniu formy w różnych miejscach programu ma to znaczenie