Czy okienko modalne moze zwrocic rekord?

0

No wlasnie
zazwyczaj to sie robi

 modalresult := idOK; 

a czy mozna jakos zrobic zeby takie okienko zwrocilo rekord?

pozdrawiam

0

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.

0

Spróbuj dać modalresult=integer(@rekord), chyba powinno zadziałać.

0
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;
...
0

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.

0
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1