Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Al abrir proyecto, hay forms que se crean solos (https://www.clubdelphi.com/foros/showthread.php?t=64000)

defcon1_es 12-03-2009 09:51:26

Al abrir proyecto, hay forms que se crean solos
 
Buenos dias, forer@s.

Llevo ya unos dias con un caso que me trae de cabeza, y hasta que no instalé el paquete cnPack, no vi realmente las dimensiones del problema:

Al abrir un proyecto concreto con mi delphi 6, se instancian automáticamente tanto el formulario principal del proyecto, como varios (8 o 10) módulos de datos.
Esto sería correcto si al cerrar dicho proyecto, se estubo trabajando con esos datamodules, pero no es asi.

Ejemplo: abro el dpr, y abro sólo una unit, que en el uses no tiene ni el formulario principal ni ninguno de los datamodules, pero estos si que los instancia delphi automáticamente, porque si compruebo desde un ejecutable con la función FindWindow si existe el formulario principal, me devuelve que si, que ya hay una ventana con ese nombre.
El nombre del formulario principal es bastante dificil que coincida con alguna de las ventanas en el momento de la comprobación.

¿Alguna idea, sugerencia al respecto?

Neftali [Germán.Estévez] 12-03-2009 10:55:16

Tal vez con algo de código quedaría más claro.
¿Estás ejecutando el IDE cuando haces las comprobaciones?

defcon1_es 12-03-2009 11:52:11

Cita:

Empezado por Neftali (Mensaje 341147)
Tal vez con algo de código quedaría más claro.
¿Estás ejecutando el IDE cuando haces las comprobaciones?

Hola Neftalí.

Enumero los pasos que realizo:

1) Abro Delphi 6 con los parámetros -hm -np
2) Abro el proyecto en cuestion y sólo me muestra la unit de constantes con la que cerré el proyecto antes.
3) Mediante la opción "View Forms" de la CnPack ya veo que hay instanciados 10 datamodules y el formulario principal (aparecen en rojo)
4) Sin hacer nada más en Delphi, ejecuto un exe que tengo preparado ya de antemano con la función FindWindow para que busque si hay una ventana de la clase del formulario principal, y me dice que si que hay.

¿Qué código quieres que te ponga?

La búsqueda de la ventana la hago asi:
Código Delphi [-]
function EsWindowsNT:Boolean;
var Versio: OSVERSIONINFO;
begin
  // versión de windows?
  Versio.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
  GetVersionEx(Versio);
  // Si no es W95, W98 o millenium
  Result := (Versio.dwPlatformID = VER_PLATFORM_WIN32_NT);
end;

// Esta es la función que comprueba si existe una ventana según su clase
function PodemosEmpezar: Boolean;
var Wdw: HWND;
begin
  if EsWindowsNT
  then begin
    Wdw := FindWindow('TFormPrincipalquedaelproblema', nil);
    if Wdw = 0 then
  // No hay instancia en ejecución
      Result := True
    else
  // Instancia en ejecución
      Result := False;
  end
  else Result := True;
end;

coso 12-03-2009 13:15:05

Hola,
se me ocurre que quizas has modificado los templates iniciales, de alguna manera...

Neftali [Germán.Estévez] 12-03-2009 13:23:30

Pues con ese va bien, ya que he podido comprobar lo jismo que tú.;)
En mi caso hago lo mismo, pero sólo me da que el formulario está abierto cuando realmente está abierto.

Es decir, cuando en el IDE lo tengo abierto.
Al abrir el formulario, sólo me aparecen en rojo (en CnPack) los que realmente tengo abiertos.
El problema es saber porqué al abrir tu proyecto te los está instanciando, ya que segun el comportamiento de mi Delphi no los abre (D6) y parece que cnPack tampoco.

¿Tienes algun otro experto instalado que pueda estar haciendo esto?
¿te pasa si creas otro proyecto en blanco conun par de formularios?
¿Y si a ese proyecto de prueba le añades un DM?

defcon1_es 12-03-2009 16:23:16

Cita:

Empezado por Neftali (Mensaje 341167)
¿Tienes algun otro experto instalado que pueda estar haciendo esto?

Tenia GExperts y DelphiSpeedUp, pero los he desinstalado y sigue igual.
Cita:

Empezado por Neftali (Mensaje 341167)
¿te pasa si creas otro proyecto en blanco con un par de formularios?

No, sólo con ese proyecto en concreto.
En el resto de proyectos que tengo, eso no pasa.
Cita:

Empezado por Neftali (Mensaje 341167)
¿Y si a ese proyecto de prueba le añades un DM?

No crea automaticamente el nuevo datamodule, siempre crea los mismos :confused:


Lo malo de esto, es que cuando los tengo abiertos, no puedo hacer un build del proyecto.

¿Se os ocurre algo que pueda mirar?

Neftali [Germán.Estévez] 12-03-2009 16:38:38

¿Algun componente externo (estoy pensando an algunos de multiidioma) que pueda hacer la carga?

defcon1_es 12-03-2009 17:57:01

coso: ¿Cómo se modifican los templates?
disculpa, pero no se a que te refieres.:o

Neftalí: pues no, no se usa ningún componente multiidioma.
se usa el componente wwIntl de InfoPower 3000, pero es para cambiar los mensajes de los componentes de InfoPower.

Muestro un resumen de las clases usadas en el proyecto:

[Application1]
File Number=2795679982
TAction=168
TActionList=6
TAppEvents=1
TBarSeries=6
TBevel=161
TBitBtn=691
TBlobField=76
TBooleanField=82
TButton=287
TChart=1
TCheckBox=764
TCheckListBox=2
TClientSocket=1
TColorDialog=15
TComboBox=149
TCopyFile=2
TDataSource=741
TDateEdit=1
TDateField=46
TDateTimeField=933
TDateTimePicker=87
TDBChart=5
TDBCheckBox=8
TDBEan=10
TDBEdit=3
TDBGrid=3
TDBImage=2
TDBLookupComboBox=8
TDBMemo=21
TDBRadioGroup=7
TDBText=613
TDesignQuickReport=2
TDirectoryEdit=11
TDirectoryListBox=1
TDistractBar=7
TdxContainer=2
TdxWinXPBar=12
TEan=4
TEasyListview=1
TEdit=360
TEditCopy=2
TEditCut=2
TEditPaste=2
TEditUndo=2
TElTree=1
TEnhancedListbox=2
TEventScrollbox=1
TfcImageBtn=5
TfcLabel=44
TfcPanel=33
TfcShapeBtn=36
TFileListBox=1
TFilenameEdit=4
TFloatField=5649
TFontDialog=13
TFontEdit=1
TFormTransitions=2
TGauge=2
TGroupBox=521
THeader=1
TIBClientDataSet=16
TIBDatabase=5
TIBQuery=12
TIBSQL=13
TIBStoredProc=1
TIBStringField=5093
TIBTransaction=9
TIBUpdateSQL=4
TIdAntiFreeze=1
TIdMessage=3
TIdPOP3=1
TIdSMTP=2
TImage=61
TImageList=33
TIntegerField=3772
TJvDBGridExcelExport=1
TJvDBSpinEdit=74
TJvDirectoryEdit=2
TJvDriveCombo=1
TJvEdit=1
TJvFilenameEdit=2
TJvGradient=3
TJvGradientHeaderPanel=22
TJvImageComboBox=1
TJvPageControl=1
TJvPanel=12
TJvProgressComponent=1
TJvRadioGroup=2
TJvSpinEdit=5
TJvTabControl=1
TJvTabDefaultPainter=2
TLabel=4209
TLabeledEdit=12
TLineSeries=55
TListBox=62
TListView=10
TMainMenu=5
TMaskEdit=6
TMemo=85
TMemoField=44
TMenuItem=987
TNotebook=3
TOpenDialog=12
TOpenPictureDialog=1
TPage=16
TPageControl=88
TPanel=1721
TpgBoton=697
TpgButton=44
TpgDBCheckBox=165
TpgDBComboBox=48
TpgDBDateTimePicker=129
TpgDBEdit=1835
TpgDBEditLookup=1074
TpgDBGrid=364
TpgDBImage=36
TpgDBLookupCombo=7
TpgDBLookupComboDialogo=2
TpgDBRadioGroup=29
TpgFormContainer=1
TpgGroupBox=72
TpgIBDataSet=150
TpgIBQuery=653
TpgIBStoredProc=216
TpgRadioGroup=27
TpgRxMemoryData=147
TpgTable=18
TPopupMenu=142
TPrintDialog=2
TPrinterSetupDialog=1
TProgressBar=4
TPsQRFilters=1
TQProgressBar=2
TQRBand=96
TQRChart=3
TQRChildBand=1
TQRDBChart=3
TQrDBEan=4
TQRDBImage=28
TQRDBText=402
TQRDLoader=1
TQrEan=1
TQRepDesigner=1
TQRExpr=18
TQRGroup=17
TQRImage=12
TQRLabel=746
TQRPreview=1
TQRShape=130
TQRSysData=49
TRadioButton=60
TRadioGroup=122
TReportDesignerDialog=2
TReportPrinterDialog=4
TRulerPanel=1
TRxCalcEdit=10
TRxCheckListBox=4
TRxDBComboEdit=5
TRxLabel=6
TRxMemoryData=7
TRxRichEdit=4
TRxSpinEdit=25
TSaveDialog=7
TScrollBox=8
TSession=1
TShape=19
TShellTree=3
TSkinData=1
TSmallintField=884
TSpeedButton=701
TSplitter=2
TStaticText=61
TStatusBar=5
TStrHolder=2
TStringField=1546
TStringGrid=3
TsuiButton=22
TsuiEdit=3
TsuiForm=3
TsuiMessageDialog=1
TsuiNumberEdit=2
TsuiPanel=6
TTabbedNotebook=2
TTabControl=6
TTabPage=7
TTabSheet=304
TTextListBox=14
TTimer=37
TToolBar=2
TToolButton=29
TUnZip=1
TUPClickSplitter=23
TUpDown=8
TWebBrowser=1
TwwDataInspector=21
TwwDataSource=1
TwwDBComboBox=63
TwwDBDateTimePicker=5
TwwDBEdit=1
TwwDBGrid=5
TwwDBNavigator=10
TwwDBSpinEdit=8
TwwExpandButton=31
TwwIButton=85
TwwIncrementalSearch=2
TwwIntl=1
TwwLookupDialog=6
TwwMemoDialog=90
TwwNavButton=60
TZip=1

coso 12-03-2009 19:33:27

Yo tampoco lo se muy bien...imagino que deben haber ciertos templates, aunque no lo se seguro, para crear desde cero las forms, datamodules, services, etc, y pense que, de alguna manera, podria ser que alguno de los experts que tenia instalado hubiesen modificado estos templates iniciales. De todas maneras, releyendo la pregunta, ya vi que no debian ir por alla los tiros. saludos.

coso 12-03-2009 19:39:40

La verdad es que no entiendo muy bien la pregunta: se te instancian 8 datamodules en un proyecto, uno concreto? en tiempo de ejecucion o de diseño? si es en tiempo de ejecucion, debe aparecer en algun lado los create, ya sea en la unit de project o bien en otro lado. Si es en tiempo de diseño, eliminandolos manualmente (tanto las referencia en la clausula unit como los ficheros .dfm, .pas en si)... se te vuelven a crear una vez cerrado y reabierto el proyecto? por otra banda...que contienen estos datamodules? estan vacios? son instancias de un datamodule creado por ti o es algo completamente nuevo? la verdad es q lo que te ocurre tiene algo raro :confused:...

defcon1_es 12-03-2009 23:46:37

Cita:

Empezado por coso (Mensaje 341249)
La verdad es que no entiendo muy bien la pregunta: se te instancian 8 datamodules en un proyecto, uno concreto? en tiempo de ejecucion o de diseño? si es en tiempo de ejecucion, debe aparecer en algun lado los create, ya sea en la unit de project o bien en otro lado. Si es en tiempo de diseño, eliminandolos manualmente (tanto las referencia en la clausula unit como los ficheros .dfm, .pas en si)... se te vuelven a crear una vez cerrado y reabierto el proyecto? por otra banda...que contienen estos datamodules? estan vacios? son instancias de un datamodule creado por ti o es algo completamente nuevo? la verdad es q lo que te ocurre tiene algo raro :confused:...

Es en tiempo de diseño, nada mas abrir ese proyecto en concreto con delphi, y no, no estan vacios, están "llenos" de TIBDataSet, TIBQuery, TDataSources, etc.
Mañana probaré a eliminarlos del proyecto y volverlos a incluir, a ver si asi lo soluciono.

Gracias y que descanseis.

defcon1_es 19-11-2009 17:26:31

Ya he dado con el problema y la solución:

Resulta que para hacer el programa "más vistoso", a mi jefe se le ocurrió poner un DBImage en el formulario principal
de la aplicación de Gestión Comercial, para mostrar el logotipo de la empresa (es multi-empresa),
y el DBImage tiene el datasource en un módulo de datos que sólo contiene DataSources
(sus DataSets están en otros módulos de datos: dmcompras, dmventas, dmcobros, etc).

Al quitarle en diseño el DataSource al DBImage, Delphi ya no instancia en diseño esos DataModules (el de los DataSources y el resto).

Se le asigna en ejecución y ya está.

rafita 20-11-2009 12:40:17

"a mi jefe se le ocurrió poner un DBImage en el formulario principal"
El amigo Jesús siempre tan brillante.
Como se nota que tiene quien le saque del atolladero.
S2


La franja horaria es GMT +2. Ahora son las 01:53:41.

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