FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Evitar formularios duplicados
Tengo una aplicación en BCB6 en la que varios de los formularios están definidos como fsMDIChild. Lo que me está pasando, que no se me había ocurrido, es que se puede abrir cada uno de estos formularios más de una vez y no se me ocurre como evitarlo. En el lanzador de la aplicación, para evitar que se lance dos veces, tengo definido este código:
Código:
AnsiString cVersion = "GesInt v. 1.5." + FileDateToDateTime(FileAge(Application->ExeName)).FormatString("yy") + FormatFloat("000", DayOfTheYear(FileDateToDateTime(FileAge(Application->ExeName)))); HWND OtraVentana = FindWindow(NULL, cVersion.c_str()); if (OtraVentana != NULL) { Application->MessageBox("¡¡¡LA APLICACIÓN YA ESTÁ ACTIVA!!!", cVersion.c_str(), 48); ShowWindow(OtraVentana, SW_RESTORE); SetForegroundWindow(OtraVentana); return 0; } |
#2
|
||||
|
||||
Le he preguntado a chatgpt y dice esto:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
Cita:
a) Si estás usando las variables globales para los formularios debería bastar con preguntar si la variable está asignada o no y al cerrar el formulario asegurarte de ponerla a nil. b) Si no estás usando variables globales, sino que los creas "al vuelo", deberás detectarlo, por ejemplo por la clase. O puedes almacenar una lista con los formularios creados. O determinar el criterio para la no duplicidad; Por ejemplo, poder abrir 2 formularios de cliente, pero NO 2 del mismo cliente. En estos casos puedes consultar la lista de formularios creados usando TScreen.FormCount y TScreen.Forms (https://docwiki.embarcadero.com/Libr...een_Properties) o llevar la lista tú mismo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Gracias por las respuestas. Las propiedades TScreen->FormCount y TScreen->Forms no las conocía y creo que me va a ser muy útiles. Los formularios los voy creando cuando se pulsa la opción donde hacen falta.
Cita:
|
#5
|
||||
|
||||
Efectivamente me va valido. El código ha quedado así:
Código:
void __fastcall TfMenu::GesAfiClick(TObject *Sender) { bool lExiste = false; for (nItem = 0; nItem < Screen->FormCount; nItem ++) { if (Screen->Forms[nItem]->Name == "fPersona") { lExiste = true; break; } } if (!lExiste) Application->CreateForm(__classid(TfPersona), &fPersona); fPersona->Show(); } |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Evitar items duplicados en listbox | querecuto | Lazarus, FreePascal, Kylix, etc. | 2 | 01-06-2016 17:26:56 |
Evitar duplicados en checklistbox | CoCaInE | Varios | 1 | 16-07-2012 11:35:28 |
Evitar guardar datos duplicados | bigpeter80 | Varios | 16 | 29-11-2008 15:10:02 |
sugerencia para evitar clientes duplicados | Patricio | Varios | 2 | 06-11-2008 19:54:00 |
Evitar duplicados | hectorin | Conexión con bases de datos | 2 | 29-10-2004 17:37:25 |
|