Newsgroup: it.comp.lang.delphi
Titolo: parent su ShowModal

D7 : da un form richiamo un Form personalizzato (TForm),
se imposto il parent sul form che lo richiama non posso
utilizzare i controlli di nessuno dei 2 form.
 
frm_Dialog -> TForm standard BorderStyle = fsDialog
 
procedure Tfrm_Base.LogIn;
begin
  try
    frm_Dialog := TFrm_Dialog.Create(nil);
    //
    //se imposto il parent non posso accedere ai TEdit, TButton
    //
    frm_Dialog.Parent := Self;
    //
    //se non imposto il Parent accedo ai controlli
    //
    if frm_Dialog.ShowModal = mrOK then
      {}
    else;
      {}
  finally
    FreeAndNil(frm_Dialog);
  end;
end;

 utilizzare i controlli di nessuno dei 2 form.
 
Ma perché dovresti impostare la proprietà "Parent"?
A che scopo?
 
-- 
MARCO BREVEGLIERI
#Home: 
http://www.marco.breveglieri.name
 
#Blog: 
http://www.compilaquindiva.net
 

>
fare in modo che il nuovo form non esca dall'area di chi lo chiama;
senza impostare il Parent, non vedo come poterlo fare.
 

 senza impostare il Parent, non vedo come poterlo fare.
 
Se non si tratta di un'applicazione MDI (
http://en.wikipedia.org/wiki/Multiple_document_interface
), per cui il "contenimento" è già implicito nel rapporto tra "MDI Form" (finestra principale) e "MDI Child", quanto chiedi non è realizzabile, o meglio non ha molto senso applicarlo e non funziona come probabilmente intendi tu.
 
Il rapporto di "partnership" riguarda un controllo e i propri controlli figli che vengono visualizzati al loro interno: se tu apri un Form come finestra di dialogo, usando Show() oppure ShowModal(), la finestra appare "al di sopra" dei Form esistenti, sempre e comunque.
 
Se vuoi realizzare un'interfaccia che possa essere riutilizzata in più punti dell'applicazione e che trovi posto all'interno di un Form, allora devi creare un *Frame*, che ha esattamente questo scopo.
Come per tutti gli altri controlli, puoi impostare la proprietà "Parent" per scegliere dove visualizzarlo.
 
Se vuoi imporre dei limiti alla posizione del Form in modo che sia legata a quella del Form presente sotto, innanzitutto farei molta attenzione a questo tipo di forzatura, visto che si lavora sempre con monitor e risoluzioni differenti, e comunque sia non escludo che si debba scomodare qualche funzione API per imporre i limiti richiesti, anche se io lo eviterei perché non vedo quali vantaggi potrebbe dare, e comunque la posizione corretta del Form - avendo a disposizione tutti i dati della finestra principale - potresti determinarla senza fatica.
 
Ciao,
  Marco.


Beh di "truccacci" se ne possono usare (piccolo esempio sotto) ma, come 
ti ha detto Marco, non è una buona cosa se non usi MDI o FRAME.
 
Dichiaro una variabile globale di tipo Tform (es. Main : TForm) e la 
imposto con Main := frm_Base o qualsiasi altra form da dichiarare Parent.
 
Ora, all'interno della tua form modale devi intercettare il messaggio 
WM_MOVE e, eseguirai una procedura simile a questa:
 
Procedure MiaForm.OnWmMove(Var Msg : TMessage);
Begin
   If Left < Main.Left Then Left := Main.Left;
 
   If Top > Main.Top Then Top := Main.Top;
 
   If (Left + Width) > (Main.Left+Main.Width)
   Then
     Left := (Main.Left+Main.Width)-Width;
 
   If (Top + Height) > (Main.Top +Main.Height)
   Then
     Top := (Main.Top +Main.Height)-Height;
End;
 
Stesso discorso va fatto se la tua finestra è ridimensionabile, in 
questo caso basta lavorare sull'evento OnResize
 
David
