Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
alguien tiene la unidad para evitar multiples instancias de Roman

Lo que pasa es que trato de hacer el truco de delphi, para evitar multiples instancias pero no me funciona, me marca un error y no se ejecuta, ya segui los pasos, asi que intento conseguir la Unidad de Roman 'uiapp.pas' y he mirado algunos post anteriores donde la recomienda y explica que hay que hacer para que funcione, pero el link que deja de su pagina ya no existe.

quisiera saber si alguien me podria proporcionar dicha unidad o si es que alguien saber donde la puedo conseguir, de antes manos muchas gracias y es que quiero evitar las multiples instancias de mi programa, para que solo se sejecute una sola vez, saludos y espero alguien me pueda echar la mano con esto.
Responder Con Cita
  #2  
Antiguo 28-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Página de Román.
Responder Con Cita
  #3  
Antiguo 28-07-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

http://roman.clubdelphi.com/


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 28-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ah ok perfecto muchisimas gracias, saludos a la comunidad que siempre ayudan
Responder Con Cita
  #5  
Antiguo 28-07-2011
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
Román está instanciado y presente siempre, multiple y versátil.

__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #6  
Antiguo 28-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
sorry de nuevo :S ya que mire la unit de Roman y seguro que el problema es mio por que no he visto que alguien se queje de la unidad que Roman nos proporciono a todos muy amablemente, espero si alguien me puede ayudar ya que no pude echar a andar esto de evitar multiples instancias, expongo mi problema

este es el codido, haciendo los pequenios cambios como dice en la pagina qu esolo fueron aniadir 2 lineas,

Cita:
unit UIApp;

interface

implementation

uses
Windows, SysUtils, Forms;

const
{ Cadenas para registrar el mutex y el mensaje }
sMutex = 'F55F3FEC-94CC-4A02-8B31-5BF0EBE9E9EA';
sActivar = 'D8A807D2-D4DC-4102-B431-9CCD3636FFAB';

var
mActivar : Cardinal; { Mensaje para activar la instancia anterior }
Mutex : Cardinal; { Mutex }
PrevWndProc : TFarProc; { Procedimiento de ventana original }


function AppWndProc(Handle: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LongInt; stdcall;
var
FgThreadId : DWORD; { Hilo de la app. que tenga el foco }
AppThreadId : DWORD; { Hilo de nuestra aplicación }

begin
if Msg = mActivar then
begin
{Esta parte la pongo como dice en la pagina, y todo bien pero no me evita las multiples instancias
}
if not IsWindowVisible(Handle) then
ShowWindow(Handle, SW_SHOW);
{ Si está minimizada basta restaurarla }
if IsIconic(Handle) then
ShowWindow(Handle, SW_RESTORE)
else
begin
{ Obtener los hilos }
FgThreadId := GetWindowThreadProcessId(GetForegroundWindow, nil);
AppThreadId := GetWindowThreadProcessId(Handle, nil);

{ Anexar el hilo de nuestra app. al de la que tenga el foco }
AttachThreadInput(AppThreadId, FgThreadId, true);

{ Ahora sí, activar la applicación }
SetForegroundWindow(Handle);

{ Separar el hilo de nuestra app de la otra }
AttachThreadInput(AppThreadId, FgThreadId, false);
end;

Result := 0;
end
else
{ Dejar que el procedimiento original se encargue de los otros mensajes }
Result := CallWindowProc(PrevWndProc, Handle, Msg, wParam, lParam);
end;

procedure Activar;
begin
{ Mandamos el mensaje a todas las ventanas }
SendMessage(HWND_BROADCAST, mActivar, 0, 0);
end;

procedure Registrar;
begin
{
En la Pagina de Roman dice que cambiemoso esta parte por algo algo asi
mActivar := RegisterWindowMessage(PChar(sActivar + Application.ExeName));
Mutex := CreateMutex(nil, true, PChar(sMutex + Application.ExeName));

pero mi problema viene siento que si hago esto me abre las sesiones de todos modos
}
mActivar := RegisterWindowMessage(sActivar);
Mutex := CreateMutex(nil, true, sMutex);

{ Si ya existe el mutex lanzamos una excepción silenciosa }
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Mutex := 0;
abort;
end
else
begin
{ Sustituimos el procedimiento de ventana }
PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
end;
end;

initialization
try
Registrar;
except
Activar;
Halt;
end;

finalization
if Mutex <> 0 then ReleaseMutex(Mutex);
end.
lo que me ocurre, es que al ejecutar el exe, me abre normal el programa, pero si intento ejecutar de nuevo mi aplicacion no la abre, eso esta muy bien, el problema es que checo en el Administrador de tareas y me abre 2 procesos de mi programa, uno que es el correcto es el numero uno, y el segundo que no lo abre el programa por que ya esta abierto uno, pero el proceso esta activo y al momento de cerrar mi programa, lo cierro y su proceso tambien se cierra pero el segundo proceso de la instancia del programa que no se abrio, no se cierra, quedandose en memoria y evitando que futuras aplicaciones de mi programa se abran, espero que alguien me pueda ayudar, en la pagina de Roman menciona que hay que cambiar los valores de las constantes, se las cambio pero aun asi me sigue pasando ese error.

Aunque no se abra un segundo programa, ( una ventana ), en el administrador de procesos se ve que si esta abierto, y al cerrar el programa, la primer instancia, las otras instancias o veces que intente abrir el programa para verificar que no se abrieran, siguen activas y por ende despues ya no puedo abrir para nada mi aplicacion aunque ya no este 'abierta' por que el proceso esta activo, solo hasta cuando cierro esos procesos puedo abrir de nuevo mi programa, espero alguien me pueda ayudar si no es mucha molestia, por que si me interesa evitar multiples instancias de mi programa. no se si tenga que ver por que mi programa usa MDI y al cerrar el programa pongo este codigo

Cita:
Action:= caFree;
form1:= Nil;
no se si tenga algo que ver las MDI o me falta cerrar de alguna otra forma, espero me puedan ayudar, el codigo de Roman no lo he tocado, mas que en las lineas comentadas que menciono, saludos

y agrego en el drp asi:

Cita:
uses
Forms,
UPrincipal in 'UPrincipal.pas' {frmPrincipal},
UUsuario in 'UUsuario.pas' {frmUsuario},
UDM in 'UDM.pas' {DM1: TDataModule},
UServicioCategoria in 'UServicioCategoria.pas' {frmServicioCategoria},
UInicioSesion in 'UInicioSesion.pas' {frmInicioSesion},
UTicket in 'UTicket.pas' {frmTicket},
SysUtils,
//aqui agrego la Unidad
UIApp in 'UIApp.pas';
Responder Con Cita
  #7  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
problema con las multiples sesiones de la unidad de Roman :(

Espero no estar violando las reglas del foro, mejor decidi hacer el post en un nuevo hilo, ya que lo hice en otro que fue resuelto por otro tema aparte, Ya que mire la unit de Roman y seguro que el problema es mio por que no he visto que alguien se queje de la unidad que Roman nos proporciono a todos muy amablemente, espero si alguien me puede ayudar ya que no pude echar a andar esto de evitar multiples instancias, expongo mi problema

este es el codido, haciendo los pequenios cambios como dice en la pagina que solo fueron aniadir 2 lineas

Cita:
[FONT=verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif]unit UIApp;

interface

implementation

uses
Windows, SysUtils, Forms;

const
{ Cadenas para registrar el mutex y el mensaje }
sMutex = 'F55F3FEC-94CC-4A02-8B31-5BF0EBE9E9EA';
sActivar = 'D8A807D2-D4DC-4102-B431-9CCD3636FFAB';

var
mActivar : Cardinal; { Mensaje para activar la instancia anterior }
Mutex : Cardinal; { Mutex }
PrevWndProc : TFarProc; { Procedimiento de ventana original }


function AppWndProc(Handle: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LongInt; stdcall;
var
FgThreadId : DWORD; { Hilo de la app. que tenga el foco }
AppThreadId : DWORD; { Hilo de nuestra aplicación }

begin
if Msg = mActivar then
begin
//Esta parte la pongo como dice en la pagina, y todo bien pero no me evita //las multiples instancias

if not IsWindowVisible(Handle) then
ShowWindow(Handle, SW_SHOW);

{ Si está minimizada basta restaurarla }
if IsIconic(Handle) then
ShowWindow(Handle, SW_RESTORE)
else
begin
{ Obtener los hilos }
FgThreadId := GetWindowThreadProcessId(GetForegroundWindow, nil);
AppThreadId := GetWindowThreadProcessId(Handle, nil);

{ Anexar el hilo de nuestra app. al de la que tenga el foco }
AttachThreadInput(AppThreadId, FgThreadId, true);

{ Ahora sí, activar la applicación }
SetForegroundWindow(Handle);

{ Separar el hilo de nuestra app de la otra }
AttachThreadInput(AppThreadId, FgThreadId, false);
end;

Result := 0;
end
else
{ Dejar que el procedimiento original se encargue de los otros mensajes }
Result := CallWindowProc(PrevWndProc, Handle, Msg, wParam, lParam);
end;

procedure Activar;
begin
{ Mandamos el mensaje a todas las ventanas }
SendMessage(HWND_BROADCAST, mActivar, 0, 0);
end;

procedure Registrar;
begin

//En la Pagina de Roman dice que cambiemoso esta parte por algo algo asi
//mActivar := RegisterWindowMessage(PChar(sActivar + //Application.ExeName));
//Mutex := CreateMutex(nil, true, PChar(sMutex + Application.ExeName));

//pero mi problema viene siento que si hago esto me abre las sesiones de //todos modos
}
mActivar := RegisterWindowMessage(sActivar);
Mutex := CreateMutex(nil, true, sMutex);

{ Si ya existe el mutex lanzamos una excepción silenciosa }
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Mutex := 0;
abort;
end
else
begin
{ Sustituimos el procedimiento de ventana }
PrevWndProc := TFarProc(GetWindowLong(Application.Handle, GWL_WNDPROC));
SetWindowLong(Application.Handle, GWL_WNDPROC, LongWord(@AppWndProc));
end;
end;

initialization
try
Registrar;
except
Activar;
Halt;
end;

finalization
if Mutex <> 0 then ReleaseMutex(Mutex);
end.
[/font]
[FONT=verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif]lo que me ocurre, es que al ejecutar el exe, me abre normal el programa, pero si intento ejecutar de nuevo mi aplicacion no la abre, eso esta muy bien, el problema es que checo en el Administrador de tareas y me abre 2 procesos de mi programa, uno que es el correcto es el numero uno, y el segundo que no lo abre el programa por que ya esta abierto uno, pero el proceso esta activo y al momento de cerrar mi programa, lo cierro y su proceso tambien se cierra pero el segundo proceso de la instancia del programa que no se abrio, no se cierra, quedandose en memoria y evitando que futuras aplicaciones de mi programa se abran, espero que alguien me pueda ayudar, en la pagina de Roman menciona que hay que cambiar los valores de las constantes, se las cambio pero aun asi me sigue pasando ese error.

Aunque no se abra un segundo programa, ( una ventana ), en el administrador de procesos se ve que si esta abierto, y al cerrar el programa, la primer instancia, las otras instancias o veces que intente abrir el programa para verificar que no se abrieran, siguen activas y por ende despues ya no puedo abrir para nada mi aplicacion aunque ya no este 'abierta' por que el proceso esta activo, solo hasta cuando cierro esos procesos puedo abrir de nuevo mi programa, espero alguien me pueda ayudar si no es mucha molestia, por que si me interesa evitar multiples instancias de mi programa. no se si tenga que ver por que mi programa usa MDI y al cerrar el programa pongo este codigo

[/font]
Cita:
[FONT=verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif]Action:= caFree;
form1:= Nil;
[/font]
[FONT=verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif]no se si tenga algo que ver las MDI o me falta cerrar de alguna otra forma, espero me puedan ayudar, el codigo de Roman no lo he tocado, mas que en las lineas comentadas que menciono, saludos

y agrego en el drp asi:
[/font]


Cita:
[FONT=verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif]uses
Forms,
UPrincipal in 'UPrincipal.pas' {frmPrincipal},
UUsuario in 'UUsuario.pas' {frmUsuario},
UDM in 'UDM.pas' {DM1: TDataModule},
UServicioCategoria in 'UServicioCategoria.pas' {frmServicioCategoria},
UInicioSesion in 'UInicioSesion.pas' {frmInicioSesion},
UTicket in 'UTicket.pas' {frmTicket},
SysUtils,
//aqui agrego la Unidad
UIApp in 'UIApp.pas';
[/font]
Estaba leyendo en otro hilo exactamente lo mismo pero la persona que menciono el problema ya no dijo nada mas, espero alguien me peuda ayudar, uso el Delphi 2007 en windows 7, no se si tenga algo que ver tambien eso, o si alguien tiene la unidad configurada :S podria proporcionarla, por que esta parte la quiero implementar para todas mis aplicaciones, gracias de antemano por la ayuda.
Responder Con Cita
  #8  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Bueno por si no me entendieron, explicare de esta manera.

La unidad de Roman funciona bien, hace lo que tiene que hacer, por que no me deja abrir mas de 2 programas de forma visual, pero si abre los procesos de cada intento que realice, ejemplo:

Aplicacion......................................Administrador de Tareas

1 intento de abrir...........................1 Proceso Activo// Programa se abre todo bien
2 intento de abrir...........................2 Proceso Activo//Programa no abre por que esta abierto ya uno
3 intento de abrir...........................3 Proceso Activo//No se abre por que el programa esta abierto
4 intento abrir...............................4 Proceso Activo//No se abre por que el programa esta abierto

ya con estos procesos abiertos y solo viendo un solo programa visual, cuando cierro el proceso #1 que es el programa visual, se cierra el Proceso #1, pero todos los demas procesos de intentos fallidos por abrir el programa que no se lograron tambien se quedan abierto.

los procesos #2,#3,#4 se quedan abiertos, estan en memoria, entonces si deseo abrir de nuevo mi programa, ya que esta 'cerrado' (No se ve visualmente), entonces no lo permite, por que los procesos #2,#3,#4 estan abiertos, y solo si los cierros manualmente en el Administrador de Tareas ya puedo abrir de nuevo mi programa verlo, ese es el problema que cada intento que no me cierra, se queda activo, espero alguien me pueda ayudar por que enserio no entiendo que pasa, hago todo lo que dice la pagina de Roman y nada de hecho si no modifico nada de lo que dice y solo pongo la unidad y el codigo asi, poniendola en el uses, y me hace eso, me abre los procesos y despues como decia no puedo abrir la aplicacion si estan activas algunas, espero a ver sido mas claro y que me puedan ayudar, saludos y espero enserio me puedan ayudar, gracias
Responder Con Cita
  #9  
Antiguo 29-07-2011
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Hola, yo uso este codigo en todos mis programas y funciona bien, sin dejar procesos en memoria:

Código:
  public
    constructor Create(AOwner: TComponent); override;



//======================================================================================================================
constructor TfrmMain.Create(AOwner: TComponent);
//======================================================================================================================
type
  PHWND = ^HWND;
var
  createerror: DWORD;
  FHMapObject: Integer;
begin
    FHMapObject := CreateFileMapping(
      $FFFFFFFF,                                 // use paging file
      nil,                                       // no security attributes
      PAGE_READWRITE,                            // read/write access
      0,                                         // size: high 32-bits
      1,                                         // size: low 32-bits
      PChar('Nombre_de_tu_programa'));           // name of map object
    createerror := GetLastError;
    if FHMapObject = 0 then
    begin
      MessageDlg(Format('CreateFileMapping=$%x', [createerror]),
        mtError, [mbOK], 0);
      Exit;
    end;

    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      CloseHandle(FHMapObject);
      MessageDlg('Ya hay una instancia ejecutandose', mtError, [mbOK], 0);
      Application.Terminate;
      Halt;
    end;
  Inherited;
end;
Espero te sea util.
Jorge
Responder Con Cita
  #10  
Antiguo 29-07-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
saludos.

Te he dejado un ejemplo con una unidad que pertenece a los JEDI se llama jvappinstances pruebalo y comentas.

Última edición por beginner01 fecha: 29-07-2011 a las 23:20:11.
Responder Con Cita
  #11  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Hola que tal, intentare utilizar el codigo pero lo uso como una unidad aparte y agregandola al proyecto? o lo agrego en todas las unidades, o solo en la unidad que se autogenera al comenzar el programa? sorry por la ignorancia, solo es para saber como utilizarla de la mejor manera. saludos y gracias
Responder Con Cita
  #12  
Antiguo 29-07-2011
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Yo la utilizo en el form principal de cada programa, tal cual esta en el ejemplo. Solo definis el constructor y lo implementas.
Responder Con Cita
  #13  
Antiguo 29-07-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
saludos.

te puse un ejemplo de como manejar las instancias
usando la unidad jvappinstances en este hilo
Responder Con Cita
  #14  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
jars gracias por la ayuda, y disculpa pero es que no soy la gran cosa en delphi, lo que queria saber, es como hiria declarado o el orden el que debe llevar por ejemplo, el orden de un archivo vendria siendo:

Cita:
unit UPrincipal;

interface

uses
....

type
.....


private
//Aqui todos los metodos privados
public
//Aqui todos los metodos publicos




//y aqui debajo de todo eso yo pongo tu codigo igualito como me dijiste

//Este public, supongo va en el apartado de public, debajo de private
Cita:
public
constructor Create(AOwner: TComponent); override;
//==================================================================================================== ==================
constructor TfrmPrincipal.Create(AOwner: TComponent);
//==================================================================================================== ==================
type
PHWND = ^HWND;

var
createerror: DWORD;
FHMapObject: Integer;
begin
FHMapObject := CreateFileMapping(
$FFFFFFFF, // use paging file
nil, // no security attributes
PAGE_READWRITE, // read/write access
0, // size: high 32-bits
1, // size: low 32-bits
PChar('Nombre_de_tu_programa')); // name of map object
createerror := GetLastError;
if FHMapObject = 0 then
begin
MessageDlg(Format('CreateFileMapping=$%x', [createerror]),
mtError, [mbOK], 0);
Exit;
end;

if GetLastError = ERROR_ALREADY_EXISTS then
begin
CloseHandle(FHMapObject);
MessageDlg('Ya hay una instancia ejecutandose', mtError, [mbOK], 0);
Application.Terminate;
Halt;
end;
Inherited;
end;
y mas abajo sigue

Cita:
var
frmPrincipal: TfrmPrincipal;

implementation

uses //todas las unidades

{$R *.dfm}

procedure TfrmPrincipal.Cerrar1Click(Sender: TObject);
begin
Close;
end;

//y todo los procedimientos ya desarrollados etc

seguro que yo lo estoy haciendo mal, solo espero me puedas orientar por que aun me falta mucho por aprender, o no se si hay que desarrollar algo mas al codigo, saludos y sorry por la pregunta algo tonta :S, gracias

me salen 4 errores,
1.- [DCC Error] UPrincipal.pas(64): E2004 Identifier redeclared: 'TfrmPrincipal.Create'
2.- [DCC Error] UPrincipal.pas(70): E2050 Statements not allowed in interface part (me seniala el begin, despues del constructor)
3.- [DCC Error] UPrincipal.pas(93): E2075 This form of method call only allowed in methods of derived types (me seniala el Inherited)
4.- [DCC Error] UPrincipal.pas(93): E2075 This form of method call only allowed in methods of derived types (y este es normal por que hay un error y no se puede compilar, espero me puedas echar la mano )

Última edición por ivantj24 fecha: 29-07-2011 a las 21:28:39.
Responder Con Cita
  #15  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ok lo checare muchas gracias
Responder Con Cita
  #16  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ok mucgas gracias yo lo checo y sorry si tardo es que estoy en el trabajo
Responder Con Cita
  #17  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
hola que tal de nuevo, gracias por la ayuda begginer y jars, de hecho ya me salio con el ejemplo de jars, aunque tambien intentare con el ejemplo de begginer en un momento, solo una duda con el codigo de jars, tengo un problema al declarar el constructor en public, como manejo un splash screen, yo declaro una variable publica de tipo integer, el detalle es que cuando declaro el constructor me genera una advertencia en esa parte y solo cuando pongo en comentarios la variable que usa el splashscreen solo asi puedo correo el programa y todo se realiza perfectamente bien, como deberia de funcionar, lo que queria saber es a que se debe esto? acaso no se puede declarar variables, mientras tenga un constructor ? por que si he probado declarando metodos con variables publicas, pero esta es la primera ocacion que me ocurre esto con un constructor, ya que anteriomente nunca habia usado en delphi de esta forma, espero me puedan explicar o por que esto, aqui dejo el mensaje que me pone como advertencia:

[DCC Error] UPrincipal.pas(58): E2169 Field definition not allowed after methods or properties

public
constructor Create(AOwner: TComponent); override;
//SplashScreenHandle:integer; //solo si lo pongo en comentarios o elimino ya me deja compilar y probar el programa.
end;


no se puede usar variables publicas junto con constructores? soy nuevo en delphi sorry si es algo tonta la pregunta o por que me sucede eso.
Responder Con Cita
  #18  
Antiguo 29-07-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Hola Beginner que tal, estuve checando los archivos, y supongo qu ehay que agregar la unit
JvAppInst a msi proyectos, eh intentado hacer esto, pero no me resulta, si pongo en el dru agregar la unit me generar un error en la unidad JvAppInst, en el apartado que dice:

{$I jvcl.inc}


me pregunto si es que hay que agregar la unidad o que hay que hacer, por que tambien intente abrir todos los archivos para verificar el contenido pero en algunos me decia que no podia abrirlos: y solo podia abrir JvAppInst.pas pero no se si agregarla como te decia, y ponerle en el dru el agregado algo asi

Cita:
uses
JvAppInst,//ponerla en el uses o como
Forms,
UPrincipal in 'UPrincipal.pas' {frmPrincipal},
//y este es el error que me sale si quiero abrir todos los archivos
Cita:
[Window Title]
Error

[Content]
Unable to load project C:\Users\Ivan\Downloads\multiples instancias delphi\jvappinstances\Project1.dproj
Sólo se admite un elemento de nivel superior en un documento XML.

Line: 2
<Delphi.Personality ><VersionInfo><Versi

[OK]
espero me puedas orientar de ante mano muchas gracias
Responder Con Cita
  #19  
Antiguo 29-07-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
Cita:
Empezado por ivantj24 Ver Mensaje

public
constructor Create(AOwner: TComponent); override;
//SplashScreenHandle:integer; //solo si lo pongo en comentarios o elimino ya me deja compilar y probar el programa.
end;


no se puede usar variables publicas junto con constructores? soy nuevo en delphi sorry si es algo tonta la pregunta o por que me sucede eso.
"las variables deben declararse primero y luego las propiedades o metodos".
prueba asi.
Código Delphi [-]
public
  SplashScreenHandle:integer;
  constructor Create(AOwner: TComponent); override;
  end;
Responder Con Cita
  #20  
Antiguo 29-07-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ivantj24 Ver Mensaje
y agrego en el drp asi:

Cita:
uses
Forms,
UPrincipal in 'UPrincipal.pas' {frmPrincipal},
UUsuario in 'UUsuario.pas' {frmUsuario},
UDM in 'UDM.pas' {DM1: TDataModule},
UServicioCategoria in 'UServicioCategoria.pas' {frmServicioCategoria},
UInicioSesion in 'UInicioSesion.pas' {frmInicioSesion},
UTicket in 'UTicket.pas' {frmTicket},
SysUtils,
//aqui agrego la Unidad
UIApp in 'UIApp.pas';
No sé si se pueda resolver así. Pero ¿has probado incluir la unidad uiapp.pas al principio de la cláusula uses del dpr, tal como se indica en el texto? (Tú la estás colocando al final)

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
alguien tiene la unidad para evitar multiples instancias de Roman ivantj24 Varios 11 29-07-2011 23:48:58
como generar ventas multiples (seleccionar multiples items) userdelphi Varios 4 30-12-2010 03:52:21
Problema con Sesiones Http yomismo24 Internet 0 08-04-2008 18:38:33
Problema con RaveReports (multiples instancias) az_jazo Varios 2 24-05-2006 18:55:03
Problema con parámetros o sesiones __cadetill PHP 8 17-11-2003 23:31:52


La franja horaria es GMT +2. Ahora son las 22:38:47.


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
Copyright 1996-2007 Club Delphi