Hola de nuevo
Pues eso, quiero crear un form dentro de un componente TPageControl que se active al entrar en un componente de cualquier pestaña. Para ello hago lo siguiente:
Código Delphi
[-]
type
TForm_Main = class(TForm)
...
private
procedure CrearFormTabSheet( TabSheet:TTabSheet );
public
end;
var
Form_Main: TForm_Main;
implementation
uses
frmTabSheet;
{$R *.dfm}
procedure TForm_Main.CrearFormTabSheet( TabSheet:TTabSheet );
begin
Application.CreateForm(TForm_TabSheet, Form_TabSheet);
with Form_TabSheet do begin
Application.ProcessMessages;
Parent := TabSheet;
Align := alClient;
BorderStyle := bsNone;
ShowModal;
Free;
end;
end;
El código de los eventos del form, es el siguiente:
Código Delphi
[-]
procedure TForm_Main.Form_OnCreate(Sender: TObject);
begin
end;
procedure TForm_Main.Form_OnShow(Sender: TObject);
begin
Panel_CABECERA.Font.Style := [fsBold];
ESBFloatEdit_DATOS_010.Enabled := false;
ESBFloatEdit_DATOS_020.Enabled := false;
ESBFloatEdit_DATOS_050.Enabled := false;
ESBFloatEdit_DATOS_100.Enabled := false;
BitBtn_GRABAR.Enabled := false;
end;
procedure TForm_Main.PageControl_OnChange(Sender: TObject);
var
TabSheet : TTabSheet;
begin
TabSheet := PageControl.ActivePage;
Memo_NOTAS.Lines.Add( ' PageControl_OnChange( '+TabSheet.Caption+')' );
Panel_CABECERA.Parent := TabSheet;
Panel_DATOS.Parent := TabSheet;
CheckBox_SIN_OBS.Parent := TabSheet;
BitBtn_GRABAR.Parent := TabSheet;
end;
procedure TForm_Main.PageControl_OnEnter(Sender: TObject);
var
TabSheet : TTabSheet;
begin
TabSheet := PageControl.ActivePage;
Memo_NOTAS.Lines.Add( ' PageControl_OnEnter( '+TabSheet.Caption+')' );
end;
procedure TForm_Main.PageControl_OnExit(Sender: TObject);
begin
Memo_NOTAS.Lines.Add( ' PageControl_OnExit()' );
end;
procedure TForm_Main.TabSheet_TODAS_OnEnter(Sender: TObject);
begin
Memo_NOTAS.Lines.Add( ' TabSheet_TODAS_OnEnter('+TTabSheet(Sender).Caption +')' );
end;
procedure TForm_Main.TabSheet_TODAS_OnExit(Sender: TObject);
begin
Memo_NOTAS.Lines.Add( ' TabSheet_TODAS_OnExit('+TTabSheet(Sender).Caption +')' );
end;
procedure TForm_Main.ESBFloatEdit_DATOS_005_OnEnter(Sender: TObject);
var
TabSheet : TTabSheet;
begin
TabSheet := PageControl.ActivePage;
Memo_NOTAS.Lines.Add( ' ESBFloatEdit_DATOS_005_OnEnter( '+TabSheet.Caption+')' );
CrearFormTabSheet( TabSheet );
end;
Bien, el form se crea, se asigna a la pestaña activa y se visualiza
(si lo abro con
Show), pero, de esta forma, también me permite cambiar de pestaña (cosa que no deseo).
Si lo abro con
ShowModal (para esperar hasta rellenar el formulario creado), la aplicación se cuelga vilmente
esperando algo ¿?
La pregunta es:
¿donde (o en qué evento) se pone la creación de un nuevo form para abrirlo con ShowModal?
Gracias de antemano
Salvador (salvica)