Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-02-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
TPageControl en tiempo de ejecución

Estoy experimentando con un editor de textos con un TPageControl con la idea de poder tener disponibles varios archivos simultáneamente cada uno con su respectiva solapa. Cada TTabSheet contiene un Memo.
No consigo crear un nuevo TTabSheet en el TPageControl en tiempo de ejecución [para crear un nuevo archivo]. En el evento click [Archivo nuevo... ] intento con este código sin respuesta alguna.
Código:
TTabSheet.Create(PageControl1);
Les agradeceré me orienten .
Muchas gracias y hasta pronto
Responder Con Cita
  #2  
Antiguo 27-02-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Debes asignar PageControl1 a la propiedad PageControl del TabSheet recién creado.

// Saludos
Responder Con Cita
  #3  
Antiguo 27-02-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Cita:
Empezado por roman
Debes asignar PageControl1 a la propiedad PageControl del TabSheet recién creado.

// Saludos
Gracias por la respuesta.
Efectivamente con esta indicación he conseguido crear un nuevo TabSheet.
Pero no sé cómo crearlo con un Memo en su interior como lo he hecho en tiempo de diseño con el primer TabSheet.
Para ser más claro esta es la copia del código con el que ensayo la solución de este problema.
Código:
unit PageControl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    TTabSheet.Create(Self);
     TMemo.Create(Self);
    with TTabSheet.Create(Self) do
    begin
      PageControl := PageControl1;
    end;

end;

end.
Un saludo
Responder Con Cita
  #4  
Antiguo 27-02-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por esocrates
Pero no sé cómo crearlo con un Memo en su interior

[...]

Código:
begin
    TTabSheet.Create(Self);
     TMemo.Create(Self);
    with TTabSheet.Create(Self) do
    begin
      PageControl := PageControl1;
    end;

end;
Debes asignar el TabSheet recién creado a la propiedad Parent del Memo.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-02-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Código:
begin
    TTabSheet.Create(Self);
     TMemo.Create(Self);
    with TTabSheet.Create(Self) do
    begin
      PageControl := PageControl1;
    end;
Cita:
Empezado por roman
Debes asignar el TabSheet recién creado a la propiedad Parent del Memo.

// Saludos
Pruebo con tu indicación y no me sale.
¿Cómo sería el código para esta asignación?
Muchas gracias
Responder Con Cita
  #6  
Antiguo 27-02-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿De qué manera estás intentando la última asignación que te indiqué?

No lo puedes hacer con un simple

Código:
with TTabSheet.Create(Self)
ya que necesitas una referencia al objeto para poder asignarlo. Dicho de otra forma necesitas una variable para almacenar el objeto que te devuelve Create.

// Saludos
Responder Con Cita
  #7  
Antiguo 28-02-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Con este intento consigo crear un TabSheet y un Memo. Pero El Memo creado no toma las dimensiones del TabSheet. El Form se maximiza y el TabSheet queda normal con un Memo Mimimizado. He hecho la aplicación varias veces, por si había algún problema y se repite lo mismo.
Si se les ocurre algo para orientarme en cual puede ser el error se los agradeceré.
Un saludo

Código:
   var
   MiHoja: TTabSheet;
begin
   MiHoja :=  TTabSheet.Create(Self);
   MiHoja.PageControl := PageControl1;


   with TMemo.Create(Self) do
       Parent := MiHoja;
      Align := alClient;
end;

Última edición por esocrates fecha: 28-02-2004 a las 20:25:52.
Responder Con Cita
  #8  
Antiguo 28-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
bueno, puedes utilizar los Anchors para anclarla a las posiciones deseadas. Si quieres que se redimensione con el form

Código:
MiHoja.Anchors = [akLeft,akTop,akRight,akBottom];
Creo que sería así
Responder Con Cita
  #9  
Antiguo 29-02-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Hola a todos. He conseguido la solución.
Sé que para Uds. será algo sencillo. Pero para mí que estoy en los comienzos es una gran alegría.
En tiempo de diseño puse align:=alClient al TPageControl para que no quede desproporcionado cuando se maximiza el Form.
Luego con este código creo un panel, un Memo y el correspondiente TabSheet. (ExtCtrls en Uses para el Panel)

Código:
procedure TForm1.Button1Click(Sender: TObject);
var m:integer;

begin
        with TTabSheet.Create(Self) do
                begin
                        PageControl := PageControl1;
                        Name:='Tab'+inttostr(PageIndex);
                        Caption := name;
                        m:=PageIndex;
                        align:=alClient;
                end; 
        with TPanel.Create(self) do
                begin 
                        parent:= pagecontrol1.Pages[m];
                        name:='Panel'+inttostr(m);
                        caption:=name;
                        align:=alClient;

                end;
        with TMemo.Create(self) do
                begin
                        parent:= pagecontrol1.Pages[m];
                        name:='Memo'+inttostr(m);
                        Align := alClient;
                end;
end;



end.
Muchas gracias por todo lo que me ayudaron
Un saludo y hasta pronto

Última edición por esocrates fecha: 29-02-2004 a las 13:28:35.
Responder Con Cita
  #10  
Antiguo 01-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Bueno, pero... ¿de dónde sale eso de

Cita:
La referencia que da Delphi dice que la propiedad Width no funciona para los Controles contenidos en los TabSheet creados en tiempo de ejecución.
?

Porque a mi me funciona perfectamente.

// Saludos
Responder Con Cita
  #11  
Antiguo 01-03-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Tomado de la ayuda de delphi
Cita:
Determines how the control aligns within its container (parent control).

property Align: TAlign;

Description

Use Align to align a control to the top, bottom, left, or right of a form or panel and have it remain there even if the size of the form, panel, or component that contains the control changes. When the parent is resized, an aligned control also resizes so that it continues to span the top, bottom, left, or right edge of the parent.

For example, to use a panel component with various controls on it as a tool palette, change the panel’s Align value to alLeft. The value of alLeft for the Align property of the panel guarantees that the tool palette remains on the left side of the form and always equals the client height of the form.

The default value of Align is alNone, which means a control remains where it is positioned on a form or panel.

Tip: If Align is set to alClient, the control fills the entire client area so that it is impossible to select the parent form by clicking on it. In this case, select the parent by selecting the control on the form and pressing Esc, or by using the Object Inspector.

Any number of child components within a single parent can have the same Align value, in which case they stack up along the edge of the parent. The child controls stack up in z-order. To adjust the order in which the controls stack up, drag the controls into their desired positions.

Note: To cause a control to maintain a specified relationship with an edge of its parent, but not necessarily lie along one edge of the parent, use the Anchors property instead.
Pues yo tambien he quedado intrigado, y alli les pego la ayuda de delphi sobre la propiedad align, no dice nada al respecto

Cita:
En tiempo de diseño puse align:=alClient al TPageControl para que no quede desproporcionado cuando se maximiza el Form
Ese si es el problema, Si el padre no se redimensiona no esperes que el hijo lo haga
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #12  
Antiguo 01-03-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Cita:
Empezado por roman
Bueno, pero... ¿de dónde sale eso de


?

Porque a mi me funciona perfectamente.

// Saludos
Hola Roman:
A mí no me funcionó y me fui a buscarlo a la ayuda de Delphi 6
para TMemo Properties y encontré esto [Ver la note]
Cita:
Specifies the horizontal size of the control or form in pixels.

property Width: Integer;

Description

Use the Width property to read or change the width of the control.

Note: For tab sheet controls, changing this property at runtime has no effect.
Un saludo

Última edición por esocrates fecha: 01-03-2004 a las 16:18:49.
Responder Con Cita
  #13  
Antiguo 01-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por esocrates
A mí no me funcionó y me fui a buscarlo a la ayuda de Delphi 6
para TMemo Properties y encontré esto [Ver la note]
Pero esto es otra cosa. Originalmente dijiste:

Cita:
Empezado por esocrates
la propiedad Width no funciona para los Controles contenidos en los TabSheet creados en tiempo de ejecución
La referencia a la ayuda que mencionas, para empezar no se refiere a la propiedad Width específicamente de un Memo sino de un Control y no dice que no se pueda cambiar la propiedad Width de un control contenido en un Tab Sheet sino que no se puede cambiar la propiedad Width del TabSheet, lo cual es distinto. De hecho tampoco se puede cambiar durante el diseño ya que funciona similar a cuando se tiene la propiedad Align de cualquier control en alTop, alBottom o alClient: no se puede cambiar su propiedad Width (en diseño o ejecución) porque ésta se ajusta al control contenedor.

// Saludos
Responder Con Cita
  #14  
Antiguo 01-03-2004
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Cita:
Empezado por roman
Pero esto es otra cosa. Originalmente dijiste:



La referencia a la ayuda que mencionas, para empezar no se refiere a la propiedad Width específicamente de un Memo sino de un Control y no dice que no se pueda cambiar la propiedad Width de un control contenido en un Tab Sheet sino que no se puede cambiar la propiedad Width del TabSheet, lo cual es distinto. De hecho tampoco se puede cambiar durante el diseño ya que funciona similar a cuando se tiene la propiedad Align de cualquier control en alTop, alBottom o alClient: no se puede cambiar su propiedad Width (en diseño o ejecución) porque ésta se ajusta al control contenedor.

// Saludos
Tenés razón. Muchas gracias
Un saludo
Responder Con Cita
  #15  
Antiguo 01-03-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Perdon lei mal, crei que el que no funcionaba con el TabSheet era el Align, y resulta que es el width

Pero el align no te funcionaba por lo que te decia anteriormente
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:18:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi