PDA

Ver la Versión Completa : Crear un RichEdit sobre un TABBEDNOTEBOOK en RUNTIME


bustio
18-10-2004, 20:53:44
HOla!

necesito crear un TMEMO sobre un TAB de un TABBEDNOTEBOOK en runtime, lo que no se como hacerlo.

La idea es que tengo un boton "Nueva Pagina", y quiero que cuando este sea presionado se cree una nueba pestanna del TABBEDNOTEBOOK, y junto con ella salga ya mi TMEMO, ocupando toda el area del TABBEDNOTEBOOK.

Probe con esto pero no me sale nada.. no da error, pero no se ve el componente:

var
boton : TButton;
PagAct : Integer;
begin
PagAct := AbbedNoteBookEditor.Pages.Count - 1;
//selecciono la pag actual para sobre ella pegar mi boton.
AbbedNoteBookEditor.ActivePage :=
AbbedNoteBookEditor.Pages.Names[PagAct];
Boton := TButton.Create(Self);
Boton.Parent := Self;
Boton.Left := 100;
Boton.Top := 100;
Boton.Caption:='Pulsame';
Boton.Name := 'Boton';
end;

Agradezco cualquier sugerencia..!!!!

GRACIAS!!

mamcx
22-10-2004, 01:11:28
Solo falto poner el Boton.Visible:=True. Todos los controles creados en runtime estan invisibles para evitar que se vea mientras se configuran (una muy buena idea, por supuesto)

roman
22-10-2004, 01:44:47
Solo falto poner el Boton.Visible:=True. Todos los controles creados en runtime estan invisibles para evitar que se vea mientras se configuran (una muy buena idea, por supuesto)

Esto de hecho no es así. Prueba con


with TButton.Create(Self) do
begin
Left := 8;
Top := 8;
Caption := 'Hola';
Parent := Self;
end;


y verás que el botón aparece sin más. El control se hace visible dentro del proceso de asignación de Parent.

// Saludos

roman
22-10-2004, 02:27:37
Vamos a ver. Este hilo me daba flojera por el tipo de control usado. ¡Un TabbedNoteBook! Pero si eso usaba mi abuelito :D

Como no estés programando para Delphi 1.0 no encuentro razón a la vista para usar este tipo de controles obsoletos en lugar de un PageControl.

Pero bueno, en gustos se rompen géneros.

Para empezar no entiendo bien qué es lo que te propones. Hablas de un botón mediante el cual insertar nuevas páginas pero en el código que escribes lo que insertas es el botón. Por ningún lado aparece la nueva página ni mucho menos el Memo. :confused:

Por otro lado, suponiendo que deseas insertar el botón en una página del TabbedNoteBook entonces no puedes poner

Boton.Parent := Self;

ya que el padre del botón debe ser la página y no el formulario.

El problema es que hasta donde he revisado no encuentro que el TabbedNoteBook publique la lista de páginas- la propiedad Pages se refiere a los nombres de las páginas pero no a las páginas en sí.

Sin embargo la propiedad Controls del TabbedNoteBook contiene la lista de controles cuyo padre es el TabbedNoteBook y, al parecer, los únicos controles posibles son justamente las páginas (TTabPage) de manera que puedes asignar el Parent del botón así:

Boton.Parent := TWinControl(AbbedNoteBookEditor.Controls[Indice]);

// Saludos

bustio
23-10-2004, 17:17:21
Tienes toda la razon. disculpame. En realidad lo que quiero hacer es una especie de editor de codigo, pero lo que necesito es que por ejemplo, cuando quiera abrir una nueva ventana de edicion para poner algo nuevo, que me salga algun control que me permita insertarle un RichEdit ecima para poder trabajar, y de paso que pueda ir a las demas ventanas con codigo abierto. Seria algo asi como la ventana de edicion del delphi, en la que se tienen varias UNITS y si abres una nueva se crea un Tab para el nuevo codigo, dejando las demas detras y pudiendo acceder por ellas. Esa es la idea de manera general. Seleccione el TAbbedNoteBook por que para hacer esto segui un ejemplo de codigo donde se lograba esto con este componente y lo que hice fue seguir la manera de hacer las cosas para ver como funcionaba, no tenia idea de que fuera tan viejo!!! Pero bueno, el PageControl creo que funcina igual y si es asi ya mismo lo cambio. Y el codigo del boton que puse encima es por que cuando vi que el nuevo AbbedNotebook no me aparecia por ningun lugar probe con un boton, probe crearlo en runtime para ver en que me estaba equivocando con el AbbedNoteBook... lo que cuando inserte el codigo en el Foro no lo cambie y lo deje con el del boton.
Ahora, aclarada todas las dudas.. como puedo crear ese efecto de las nuevas ventanas igual que el del Delphi usando el PageControl? Y una vez creado el nuevo PageControl como puedo ponerle encima en RunTime un RichEdit para permitir insertar textos en el???


GRACIASSSS!!!!

roman
23-10-2004, 20:42:15
Ok, ahora está más claro.

El algoritmo ya lo tienes:

1. Crear un TabSheet (una página del PageControl)
2. Crear un RichEdit e insertarlo en el TabSheet
3. Agregar el Tabsheet al PageControl

Te quedaría algo así:


var
TabSheet: TTabSheet;
RichEdit: TRichEdit;

begin
TabSheet := TTabSheet.Create(Self);
TabSheet.Caption := Format('TabSheet%d', [PageControl.PageCount + 1]);

RichEdit := TRichEdit.Create(Self);
RichEdit.Align := alClient;
RichEdit.Parent := TabSheet;

TabSheet.PageControl := PageControl;
PageControl.ActivePage := TabSheet;
end;


Nota que la inserción del TabSheet en el PageControl es lo último que haces justamente por lo que comenta mamcx- al dejarla al final te aseguras que será visible al usuario sólo hasta que todo esté acomodado.

En el Caption del TabSheet simplemete estoy asignando un número secuencial pero puedes adaptarlo a que sea, por ejemplo, 'Documento1', 'Documento2', 'Documento3', etc. También, si lo que deseas es abrir un archivo ya existente en lugar de crear uno nuevo entonces puedes usar RichEdit.Lines.LoadFromFile('archivo.rtf') para que se cree la nueva instancia del editor ya con el archivo cargado.

// Saludos

bustio
23-10-2004, 21:18:10
Gracias Roman!!! Uds son lo maximo.. al igual que este foro!!