Newsgroup: it.comp.lang.delphi
Titolo: inzi con Delphi, BorderStyle Form

ho un Form1 e a runtime crea Form2 che contiene un TEdit
solo Form1 e' Autocreate.
 
problema:
- metto BorderStyle = none , il Tedit e' editabile
- bsSizeable, o bsSingle , il TEdit non e' editabile
 
il problema e' nel Parent, se elimino Parent = self,
il form e' scollegato e TEdit e' accessibile.
 
come risolvo ?
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2 := TForm2.Create(self);
   Form2.Parent := self;
   Form2.Show;
end;

Ciao Candace,
 
C> ho un Form1 e a runtime crea Form2 che contiene un TEdit solo Form1
C> e' Autocreate.
C> 
C> problema:
C> - metto BorderStyle = none , il Tedit e' editabile
C> - bsSizeable, o bsSingle , il TEdit non e' editabile
C> il problema e' nel Parent, se elimino Parent = self, il form e'
C> scollegato e TEdit e' accessibile.
 
Ma è corretto che Form2 sia all'interno di Form1? In questo caso ti consiglio 
di impostare le proprietà FormStyle di Form1 a fsMDIForm e la proprietà FormStyle 
di Form a fsMDIChild.
 
C> come risolvo ?
 
Se non vuoi utilizzare le form di tipo MDI allora devi attivarla:
 
SendMessage(Form1.Handle, WM_NCACTIVATE, WPARAM(True), 0);
 
HTH,
David
 
 

 il form e' scollegato e TEdit e' accessibile.
 
Una domanda: ma perché mai hai impostato "Form1" come Parent del "Form2"?
Qual è il motivo di questa scelta?
 
--
MARCO BREVEGLIERI (Software and Web Developer)
#Home: 
http://bit.ly/marcobreveglieri
 
#Blog: 
http://bit.ly/compilaquindiva
 

>
con questa ero convinta di assegnare Form2 al padre Form1
Form2.Parent := self;
 
e non equivale a Form2.Parent := Form1 ?
 
grazie dell'intervento Candace
 
 

>
l'opzione attiva correttamente Form2,
ma perche' il Form con borderstyle <> bsnone non si attiva ?
 
Candace
 

 >>> Se non vuoi utilizzare le form di tipo MDI allora devi attivarla:
 >>>
 >>> SendMessage(Form1.Handle, WM_NCACTIVATE, WPARAM(True), 0);
 >>>
 
altro problema connesso;
 
setto su Form1 KeyPreview := true;
e ogni tasto che premo risponde "Form padre"
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
begin
   ShowMessage('Form padre');
end;
 
da Form1 creo Form3 (ereditato da Form2 anche lui con Key preview := true)
 
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
begin
   ShowMessage('figlio');
end;
 
//--- Form3
type
   TForm3 = class(TForm2)
 
//--- creo Form3
   if not  Assigned(Form3) then Form3 := TForm3.Create(self);
   Form3.Parent := self;
   Form3.Top := 0; Form3.Left := 0;
   Form3.Show;
   SendMessage(Form3.Handle, WM_NCACTIVATE, WPARAM(True), 0);
 
ad ogni tasto risponde sempre il form padre
 
provo a ridefinire FormKeyDown virtual
 
type
   TForm2 = class(TForm)
     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: 
TShiftState); virtual;
 
type
   TForm3 = class(TForm3)
     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: 
TShiftState); override;
 
continua a rispondere Form padre e non passa mai da FormKeyDown
 
procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
begin
   inherited;
   ShowMessage('figlio');
end;
 
non devo fare niente di concreto, ma ho proprio voglia di capire il perche'.

 Form2.Parent := self;
 
Devi chiarire cosa significa per qualsiasi controllo l'essere "Parent" di un altro:
http://delphi.about.com/od/objectpascalide/a/owner_parent.htm
 
 
Ciao,
  Marco.


Ciao Candace,
 
C> altro problema connesso;
 
A parte il fatto che quello che stai facendo non mi piace per niente, ho 
fatto una prova e a me funziona correttamente anche il KeyPreview. Di seguito 
il codice che ho utilizzato:
 
Form2 := TForm2.Create(Self);
Form2.Parent := Self;
SendMessage(Form2.Handle, WM_NCACTIVATE, WPARAM(True), 0);
Form2.Show;
 
Nella mia precedente risposta ho sbagliato Form2 con Form1 nella SendMessage. 
Probabilmente ti ho messo in confusione...
 
C> provo a ridefinire FormKeyDown virtual
 
Il virtual in questo caso non serve proprio a niente :-)
 
HTH
David
 
 

> Il virtual in questo caso non serve proprio a niente :-)
si e non si puo' neppure farlo.