![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Lepe, la utilizacion de los edits (vtAddons), no utilizaran demasiado recursos del sistema (en este momento le tengo miedo a los tedits)?
Probablemente los edis estaran optimizados para ser utilizados sin ningun problema, pero por ahora no los he visto. Ahora tengo otro inconveniente que paso a comentarte: Yo pensaba usar un virtualstringtree con 3 columnas: hora, nombre, servicio. Este virtualstringtree representaria un gabinete. Te pido si podes analices el siguiente codigo y me digas que esta mal: type ptgabinete = ^ttgabinete; ttgabinete = record hora: string[7]; nombre: string[25]; servisesi: string[10]; end; procedure TForm1.FormCreate(Sender: TObject); begin xxx.NodeDataSize := SizeOf(ptgabinete); end; procedure TForm1.xxxInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var data: ptgabinete; begin Data := Sender.GetNodeData(Node); data.hora := '00:00hs'; //hora de prueba data.nombre := 'Juan'; //nombre de prueba data.servisesi := 'Masaje'; //servicio de prueba end; procedure TForm1.xxxGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var data: ptgabinete; begin Data := Sender.GetNodeData(Node); case column of 1: begin celltext := data.hora; end; 2: begin celltext := data.nombre; end; 3: begin celltext := data.servisesi; end; end; end; El problema es el siguiente: Cuando a la propiedad "rootnodecount" del virtualstringtree le pongo 1 y ejecuto la aplicacion funciona perfectamente. Es decir en el virtualstringtree veo la hora, el nombre y la sesion. Pero cuando a la propiedad "rootnodecount" le pongo un numero mayor se produce el siguiente error: Proyect MDIAPP.exe raised exception class EaccessViolation with message "Access Violation at address 700A2DEE in module MDIAPP.exe". Read of address 0000000B. Una variante que realice es la siguiente: A la propiedad "rootnodecount" del virtualstringtree le pongo 0, depues en un boton pongo la siguiente instruccion: procedure TForm1.Button4Click(Sender: TObject); var node: PVirtualNode; begin node := xxx.AddChild(NIL); end; La primera vez que presiono el boton se ejecuta bien, es decir veo la hora, nombre y sesion: HORA NOMBRE SERVICIO 00:00hs Juan Masaje Pero la segunda vez me empieza a mostrar datos corruptos (basura), hasta que vuelve a aparecer el error que te dije anteriormente: HORA NOMBRE SERVICIO 00:00hs Juan Masaje 00:00hs xxx9´´´´3333d¡¡¡¡¡¡¡¡¡¡¡dsd¡¡¡¡¡¡¡ 00:00hs sdlffj333''''¡¡¡¡¡¡¡'000'0'''''' 00:00hs Juan Masaje Probablemente algun evento estara mal, yo lo que hice fue modificar algunos ejemplos que vino el el manual del vt y tambien del ejemplo que viene con el vt. Tambien hice lo que pusiste en otro post: // definimos el registro: TRecBase = record Nombre:string[50]; direccion :string[80]; Nivel: Integer; end; PTrecBase = ^trecbase; procedure TForm1.xxxInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var data: ptgabinete; begin Sender.CheckType[Node] := ctTriStateCheckBox; Sender.CheckState[Node] := csCheckedNormal; end; procedure TForm1.xxxGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var data: ptgabinete; begin Data := Sender.GetNodeData(Node); case column of 1: begin celltext := data.hora; end; 2: begin celltext := data.nombre; end; 3: begin celltext := data.servisesi; end; end; procedure TForm1.Button5Click(Sender: TObject); var prec: ptgabinete; i:integer; node: PVirtualNode; begin for i:= 0 to 3 do begin node := xxx.AddChild(NIL); prec := xxx.GetNodeData(node); prec.hora := 'n ' + inttostr(i); prec.nombre := 'direc ' + inttostr(i); prec.servisesi := '2222'; // prec.hora2 := i; end; end; En este caso el error no se produce, pero igual te muestra los datos basura o no te muestra nada en algunos nodos. Si tenes alguna idea del problema te lo voy a agradecer. |
|
#2
|
||||
|
||||
|
Aqui hay un error:
El parámetro a SizeOf no debe ser de tipo puntero, sino el propio tipo registro. Sustituye Ptgabinete por ttgabinete. Al darle información errónea al crear el nodo, es normal que muestre basura. Haciéndolo bien, no da problemas y es rapidísimo. Tu mensaje anterior (el tocho) no lo he leído, edita el mensaje y añade las etiquetas delphi: [ delphi ] tu codigo fuente aqui [ / delphi ] (sin los espacios dentro de los corchetes) Es normal empezar un proyecto y tomar una decisión (porque se desconoce otra forma), algunas veces se queda como está y otras se cambia (depende del tiempo y beneficio que obtengas, en $$ jeje). Los recursos que toma los editores no lo he mirado mucho, pero es UN solo TEdit el usado. Por otra parte lo que en realidad se crea y destruye al entrar y salir del modo edición, es un objeto que enlaza el VT con el Edit en cuestión).
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#3
|
|||
|
|||
|
Hola Lepe, tenias razón. Ahora funciona bien. Voy a probar el componente. Cualquier otra duda que tenga les voy a volver a consultar. Gracias a todos.
|
|
#4
|
|||
|
|||
|
Saludos
mmmmm te metiste en un buen problema.
Recuerdo cuando programaba asi , no te preocupes son problemas comunes que comete uno cuando está aprendiendo a programar.Generalmente ese tipo de proyectos te dejan muchos conocimientos. En cuanto al tema de los edits, cada edit es una ventana y consume recursos, recuerda que aún puedes utilizar labels para mostrar información que el usuario no va a modificar, los label practicamente no consumen recursos. Y para una de las preguntas de tus primeros post. Como cambiar el formato de un Grid (yo siempre uso StringGrid) En el evento OnDrawCell, puedes cambiar a tu antojo el formato de como se dibujará cada celda, tipo de letra, tamaño, color de fondo, etc. Cambiando el StringGrid.Canvas.Brush.Color cambias el color de relleno, StringGrid.Canvas.Font.Color el color de la letra, con StringGrid.Canvas.FillRect(Rect) rellenas la celda y con DrawText dibujas el texto. |
|
#5
|
||||
|
||||
|
Con razón me identificaba con el problema,
también estoy haciendo una aplicación para una estetica pero sólo 5 cabinas .Yo, manejé la lista de espera con Grids (uno por cabina) y las citas con un TimePlanner muy simple hecho por mí. PD. Usa las etiquetas. Cita:
Cita:
__________________
Sitrico Última edición por sitrico fecha: 03-07-2007 a las 23:04:12. |
|
#6
|
|||
|
|||
|
Hola gabrielkc, gracias por el consejo, en estos momentos estoy utilizando el componente virtualstringtree en lugar de los tedits porque fue la unica solucion que encontre (todavia estoy en proceso de creación de los gabinetes porque este componente es un poco complicado de manejar (nodo, punteros, etc.). Quizas pueda utilizar el stringgrid en otra parte del programa que todavia no pase de tedits a virtualstringtree. Gracias.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Crear proyecto cliente / servidor | Aprendiendo | Conexión con bases de datos | 1 | 02-01-2006 16:28:49 |
| Crear Instalador para proyecto en Delphi | mieltxo | Varios | 1 | 14-12-2005 13:05:38 |
| En mi aplicacion MDI quiero crear una ventana hija desde otra ventana hija | Durbed | Varios | 8 | 05-07-2005 12:51:54 |
| Error en proyecto? | danytorres | Varios | 1 | 05-12-2003 16:35:29 |
| Como pasar parametros de una forma hija a otra forma hija | luisreg | OOP | 3 | 17-09-2003 19:18:50 |
|