2012-10-10 22 views
6

È possibile impostare l'allineamento su un TForm, ad esempio impostare un modulo su alTop e un altro su alClient - in cui le due forme occupano l'intera area dello schermo in modo ovvio. È una cosa sensata da fare in un'applicazione?A che cosa servono le proprietà Align e Anchor su TForm?

Mi accorgo anche che le ancore sono esposte sui moduli, ma non riesco a pensare a cosa sarebbero utili (cambiamenti di risoluzione? App MDI?) Qualche idea?

Modifica: Ho creato un video about this post per rendere le cose più chiare.

+4

È possibile simulare una barra delle applicazioni sul bordo del desktop, impostando 'Align' su, diciamo, alTop ' –

risposta

15

È possibile utilizzare un TForm come un controllo ordinario impostando la sua proprietà Parent:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    frmEmbed:= TForm.Create(Self); 
    frmEmbed.Parent:= Self; 
    frmEmbed.Width:= 50; 
    frmEmbed.Height:= 50; 
    frmEmbed.Align:= alRight; 
    frmEmbed.Anchors:= [akLeft, akBottom]; 
    frmEmbed.Visible:= True; 
end; 

si dovrebbero commentare frmEmbed.Align:= alRight; linea per vedere come funziona Anchors proprietà.


Se siete interessati in cui quanto sopra è utilizzato: forma parented senza una barra del titolo è un'alternativa a TFrame; i frame non erano disponibili con le prime versioni di Delphi, quindi venivano usati i moduli parentali. Li puoi trovare nel codice legacy.

+0

Uso ancora moduli incorporati nel codice corrente. C'è qualche ragione per cui i moduli di nuova genitorialità dovrebbero essere limitati al codice legacy? Trovo più facile dividere forme complesse (di solito diverse schede) in più forme invece di cornici. Mi aiuta a mantenere la mia logica divisa e limita il numero di controlli che ho su qualsiasi modulo. Normalmente ho impostato il genitore sulla scheda e impostato Align: = alClient. –

3

È possibile inserire un modulo in un altro modulo. Non so quanto sarebbe bello che funzionasse. In Delphi1 volte c'erano controlli speciali di terze parti per indirizzare l'evento. Oggi sembra funzionare più o meno fuori dagli schemi, ad eccezione delle finestre di dialogo modali. Prova in questo modo:

procedure TMainForm.Button1Click(...); 
begin 
    with TForm.Create(Self) do begin 
     Caption := 'Internal one'; 
     Parent := Self; 
     Visible := True; 
    end;  
end;  

Forse ancoraggi e allineamento avrebbero senso in questa configurazione. Dopotutto, sembra che sia stato implementato il nuovo layout IDE "a una finestra".

1

È possibile inserire un modulo in qualsiasi altro componente contenitore.

Questo è utile per l'aggancio, f.i. è possibile ancorare i moduli in una scheda di controllo della pagina o in qualsiasi punto.

Questo è utile anche come alternativa a TFrame: se si progetta un frame come TForm anziché TFrame, non sarà incorporabile in fase di progettazione e quindi non può essere modificato/sabotato dal design. editor di tempo.

I TFram incorporati possono ridefinire le proprietà o gli eventi nella forma in cui sono incorporati e ciò non è sempre auspicabile o pratico, soprattutto quando si desidera che il frame sia facilmente aggiornabile o rifattore. Le proprietà del frame embbedded modificate finiscono nel DFM, non nel PAS, e quindi non sono viste in fase di compilazione, e non sono semplici da refactoring/rinominare/etc.

2

Un caso semplice è per un formato senza didascalie (ad esempio stile metropolita win-8) è possibile ancorare un pulsante di uscita nell'angolo in alto a destra.

Ma l'uso migliore è quello di semplificare l'esecuzione di una forma complessa sensibile alle variazioni di dimensione ... Utilizzando l'akLeft e Akright, è possibile effettuare uno spazio di riempimento di controllo orizzontale in senso orizzontale. L'utilizzo di tutte e 4 le ancore è simile all'impostazione di un client su alclient, senza la necessità di circondarlo con altri pannelli.

Gran parte di ciò che è possibile fare con gli ancoraggi può anche essere fatto con molti pannelli, ma man mano che la forma diventa più complessa diventerà caotica a volte richiedendo diversi livelli di pannelli su pannelli.

Ovviamente l'utilizzo di una combinazione di pannelli e ancoraggi sarà spesso la risposta migliore.

+0

Penso che potresti aver frainteso la domanda in qualche modo. Sto davvero cercando l'utilità delle proprietà Anchors/Alignment nella classe TForm, ovvero posizionare il modulo sullo schermo, piuttosto che usarlo per posizionare i controlli sui moduli. – Alister

+0

Sì, ho frainteso. –

+0

potresti voler ritirare la risposta. – Alister

Problemi correlati