Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [Error] Missing operator or semicolon delphi (https://www.clubdelphi.com/foros/showthread.php?t=82963)

wolfran_hack 29-04-2013 01:21:37

MensajeBox Temporal?
 
estoy buscando alguna forma de tener un MensajeBox temporal, esto quiere decir que se muestre por X segundos y luego se cierre sin intervención del usuario, esto es posible? estuve mirando el MensajeBox en si no posee esta propiedad. O me recomiendan hacerlo con un Formulario?

ecfisa 29-04-2013 01:38:27

Hola wolfran_hack.

Revisa en este hilo: enviar un mensaje y que se auto cierre

Saludos. :)

wolfran_hack 29-04-2013 02:35:32

[Error] Missing operator or semicolon delphi
 
Estoy realizando un Log de errores contra un Memo1, por ejemplo:

Código Delphi [-]
Memo1.Lines.Add( formatdatetime('hh:nn:ss',now) + ' ; ' + 'Error: ' + Edit1.Text )

y me encuentro que al incluir esta linea por ejemplo en un IF:

Código Delphi [-]
  If Edit1.Text = '' then
     Memo1.Lines.Add( formatdatetime('hh:nn:ss',now) + ' ; ' + 'Error no se ingreso nada. ' )
     MessageBox(Handle,'Error no se ingreso nada.    ', 'BioStudio SMS', MB_ICONSTOP)
    else

me lanza este error:

[Error] Missing operator or semicolon delphi?

Al González 29-04-2013 02:58:23

Recuerda que en Delphi debe utilizarse el símbolo de punta y coma (";") para separar sentencias. Por otra parte, los estatutos de control If, While y For necesitan llevar Begin y End cuando contienen varias sentencias.
Código Delphi [-]
  If Edit1.Text = '' Then
  Begin
     Memo1.Lines.Add (FormatDateTime ('hh:nn:ss', Time) + ' ; ' + 'Error: no se ingresó nada.');
     MessageBox (Handle, 'Error: no se ingresó nada.', 'BioStudio SMS', mb_IconStop);
  End
  Else
Nota: semicolon en inglés es punto y coma.

---------------

Por cierto, permitiéndome un paréntesis un poco fuera de tema, al ver la primera sentencia de ese If, pensé que usando GHF quedaría un poco más corta:
Código Delphi [-]
Memo1.Lines.Add (ghISOTime (Time) + ' ; ' + 'Error: no se ingresó nada.');
Pero ahora me surgió la inquietud de permitir que el parámetro de ghISOTime sea opcional (usando en ese caso la hora actual), con lo que se acortaría un poco más:
Código Delphi [-]
Memo1.Lines.Add (ghISOTime + ' ; ' + 'Error: no se ingresó nada.');
Creo que será algo para agregar al repertorio.

Saludos.

wolfran_hack 29-04-2013 04:01:37

Me Lanza:

Código:

[Error] SmsSender.pas(127): Incompatible types: 'HWND' and 'String'
[Error] SmsSender.pas(127): Incompatible types: 'Integer' and 'PAnsiChar'
[Error] SmsSender.pas(127): Incompatible types: 'Integer' and 'PAnsiChar'
[Error] SmsSender.pas(128): Missing operator or semicolon

Código Delphi [-]
127 MessageBoxTimeout(Application.Handle,'La aplicación se cerrará en unos segundos...','',MB_SYSTEMMODAL or MB_TOPMOST or MB_ICONINFORMATION, 0, 4000); // 4000 = 4 seg
128 Application.Terminate;

wolfran_hack 29-04-2013 04:06:58

sep me falto el forms! igual no me muestra el mensaje, nunca aparece.

Casimiro Notevi 29-04-2013 04:40:52

Por favor, todo lo relacionado con este tema síguelo en este hilo, he movido todos los mensajes que has escrito en 3 hilos distintos esparcidos, pues realmente todo era lo mismo.
Gracias.

ecfisa 29-04-2013 05:19:10

Cita:

Empezado por wolfran_hack (Mensaje 459511)
Me Lanza:

Código:

[Error] SmsSender.pas(127): Incompatible types: 'HWND' and 'String'
[Error] SmsSender.pas(127): Incompatible types: 'Integer' and 'PAnsiChar'
[Error] SmsSender.pas(127): Incompatible types: 'Integer' and 'PAnsiChar'
[Error] SmsSender.pas(128): Missing operator or semicolon

Código Delphi [-]
127 MessageBoxTimeout(Application.Handle,'La aplicación se cerrará en unos segundos...','',MB_SYSTEMMODAL or MB_TOPMOST or MB_ICONINFORMATION, 0, 4000); // 4000 = 4 seg
128 Application.Terminate;

Hola wolfran_hack.

Si copiaste y pegaste exáctamente el código que te indiqué en el mensaje #2 no tendrías por que recibir error alguno.
De todos modos para no seguir dandole vueltas al asunto, el código completo del ejemplo:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}

function MessageBoxTimeOut(hWnd: HWND; lpText: PChar; lpCaption: PChar; uType: UINT;
      wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall; 
      external user32 name 'MessageBoxTimeoutA';

procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageBoxTimeout(Application.Handle,
                    'La aplicación se cerrará en unos segundos...','',
                    MB_SYSTEMMODAL + MB_TOPMOST + MB_ICONINFORMATION,  // (+ = or)
                    0,
                    4000); // 4000 = 4 seg
   Application.Terminate;
end;

end.

Saludos.

wolfran_hack 01-05-2013 23:55:54

[Error] No funciona.
 
como no funcionaba en mi proyecto (nunca se visualizaba el mensaje) cree uno en blanco y copie y pegue tal cual tu código y puse un botón. Al querer compilarlo me lanza el antivirus:



se que no es un virus, desactivo el antivirus por unos minutos, no se visualiza nunca el mensaje al presionar el botón.

le cambie esta parte:

Código Delphi [-]
external user32 name 'MessageBox';

y me lanza este error:

Cita:

No se encuentra el punto de entrada del procedimiento MessageBox en la biblioteca de vínculos dinámicos user32.dll.

wolfran_hack 02-05-2013 00:42:38

MessageBoxTimeOut
 
Encontré este otro:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    //Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

const
  MB_TIMEDOUT = 32000;

implementation  {$R *.dfm}

function MessageBoxTimeOut(hWnd: HWND; lpText: PChar; lpCaption: PChar; uType: UINT; wLanguageId: WORD; dwMilliseconds: DWORD): Integer; stdcall; external user32 name 'MessageBoxTimeoutA';

procedure TForm1.Button1Click(Sender: TObject);
var
  iRet: Integer;
  iFlags: Integer;
begin
   iFlags := MB_OK or MB_SETFOREGROUND or MB_SYSTEMMODAL or MB_ICONINFORMATION;
   MessageBoxTimeout(Application.Handle, 'El Mensaje se Mostrar por X tiempo..', 'Titulo del Mensaje', iFlags, 0, 2000) ; //2000 son 2 segundos.
end;

end.

y funciona, pero me lanza:


wolfran_hack 02-05-2013 01:31:13

Tengo una solución parcial, descargue una User32.dll que encontré por la red y la coloque en la carpeta del proyecto y dejo de lanzarme el "cartelito" de virus; debe de ser porque Avast! verifica que aplicaciones pueden o no usar al User32.dll que ya viene con el Windows.

User32.dll (44 KB): Solo la DLL.
http://mega.co.nz/#!CMJW0DxL!MXvKoVP...iOgFHh3CUwyH0Y

Mensaje Temporal.rar (176 KB): Proyecto con la DLL.
http://mega.co.nz/#!KNBhGDJK!A9xQARP...Ka7Jf6zpTqiZWM

ecfisa 02-05-2013 02:07:36

Hola.

Tenes que configurar las opciones del escudo de protección de archivos agregando a la lista de exclusiones a Delphi32.exe o a tu aplicación.

Avast: Seguridad -> Escudo del sistema de archivos -> Exclusiones.

Saludos.

TOPX 02-05-2013 15:23:28

Y yo creería que tiene que ver con usar el infame "Delphi 7 Second Edition".


La franja horaria es GMT +2. Ahora son las 01:43:51.

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