Delphi - otra de aplicaciones MDI

 
Vista:

otra de aplicaciones MDI

Publicado por rookie (36 intervenciones) el 19/03/2002 11:57:12
Hola
Lamento molestar otra vez, pero como estoy acostumbrado a desarrollar en VB y ahora tengo que hacerlo en Delphi estoy un poco perdido. Mi problema es el siguiente:
Para mostrar un formulario MDI utilizo el siguiente código al hacer click en un menú:

mdiX:=TmdiX.Create(Application);

Lo que necesito es saber cómo puedo verificar que no exista ya una ventana mdiX, porque si abro dos, luego se produce un error al tratar de cerrar la última.
Espero haber sido claro. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:otra de aplicaciones MDI

Publicado por Fer (269 intervenciones) el 20/03/2002 02:44:59
Respecto a tu pregunta anterior. Para evitar que aparezcan todos los formularios de la aplicación al arrancar, tienes que eliminarlos de la lista de formularios auto-creados. Ve a las opciones del proyecto y en una de las pestañas encontrarás dicha lista.

Eliminar una fila de un StringGrid es sencillo pero ahora no recuerdo como hacerlo, echa un vistazo a la ayuda por si hay ejemplos.

Poner un control en una celda es más complicado, si tuviese ahora el Delphi delante, prepararía un ejemplo, pero en este momento no puedo.

Para comprobar si ya existe un form de una determinada clase yo utilizo este código:

for i:=0 to Screen.FormCount - 1 do begin

if Screen.Forms[i] is TFormQueQuieroMostrar then
Screen.Forms[i].Show
else
with TFormQueQuieroMostrar.Create(Self) do
Show;

end;{for i}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Muchas gracias, pero...

Publicado por rookie (36 intervenciones) el 20/03/2002 08:52:09
Gracias Fer, pero ahora me asalta una duda. El problema es que quiero mostrar una grilla en un formulario MDI, y esta grilla debe tener una primera fila fija que me debe mostrar el nombre de la columna, así que cree un procedimiento FormatoGrilla que tiene el siguiente código:

procedure FormatoGrilla();
begin
mdiX.grilla.Cells[0,0]:='Cantidad';
end;

He probado invocarlo en los eventos FormCreate, FormShow y FormPaint, y siempre me produce el error:

Project MDIAPP.exe raised exception class EAccessViolation ...

Sé que es mucho pedir, pero si me pudieras ayudar de nuevo te lo agradecería mucho.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Muchas gracias, pero...

Publicado por Fer (269 intervenciones) el 21/03/2002 02:42:11
No entiendo muy bien el problema.
Si en el OnCreate del Form MDI pones (olvidándonos por ahora del procedimiento):

Self.Grilla.Cells[0,0] := 'Cantidad';

Debería funcionar (lo probaré en cuanto pueda). Normalmente, las excepciones del tipo que indicas son debidas a intentar referenciar a un objeto que no ha sido creado o que ya ha sido destruido.

Lo probaré y después te cuento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Muchas gracias, pero...

Publicado por Fer (269 intervenciones) el 21/03/2002 03:03:07
Confirmado. El código que indicas funciona. Se me ocurre que una posible causa para el error ue te da es que la variable mdiX no esté inicializada (no apunte a un form), en su lugar pon la referencia "Self".

Self.Grilla.Cells[0,0] := 'Cantidad';

o simplemente:

Grilla.Cells[0, 0] := 'Cantidad';

Siempre y cuando el procedimiento FormatoGrilla pertenezca a la clase del form, esto es, que lo hayas declarado como:

procedure TmdiX.FormatoGrilla();

En fin, no se si te he aclarado algo o te he liado más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ahora sí que sí

Publicado por rookie (36 intervenciones) el 21/03/2002 11:05:44
Muchas gracias, ahora si me funcíonó
Me había equivocado al declarar el procedimiento, eso es por la falta de experiencia en programación en Delphi, así que nuevamente muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar