Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Override (MessageDlg) (https://www.clubdelphi.com/foros/showthread.php?t=48441)

atani123 25-09-2007 16:04:11

Override (MessageDlg)
 
Sabe alguien como se puede sobreescribir alguna de las funciones basicas de Delphi.

Mi intencion es sobreescribir la funcion MessageDlg para insertarle alguna instruccion. Por ej:

Código Delphi [-]
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word; Override
  Begin
    Msg := Uppercase( Msg)
    Inherited;
  End;


Ya se que esto no funciona y que tampoco es posible hacer, es simplemente para que veais lo que quiero hacer. ¿Alguna idea?

atani123 25-09-2007 16:09:31

Me respondo

He creado un formulario del que heredan todos los forms.

Código Delphi [-]
unit Formulario;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tfrm = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
frm: Tfrm;
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
implementation
{$R *.dfm}
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
Var
newMsg : String;
Begin
newMsg := Uppercase( Msg);
Result := Dialogs.MessageDlg( newMsg, DlgType, Buttons, HelpCtx);
End;
end.

Por si a alguien le puede servir

maeyanes 25-09-2007 16:42:51

Lo que buscas hacer lo puedes hacer tan fácil como:

Código Delphi [-]
MessageDlg(UpperCase(Msg), DlgType, Buttons, HelpCtx);

Usando tu solución, lo puedes hacer de esta forma, la cual no necesita declarar una clase a la cual no le estás dando ningún uso:

Código Delphi [-]
unit MyDialos;

interface

uses
  Dialogs;

function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;

implementation

function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
begin
  Result := Dialogs.MessageDlg(UpperCase(Msg), DlgType, Buttons, HelpCtx)
end;

end.


Saludos...

Neftali [Germán.Estévez] 25-09-2007 17:31:30

Atani, te recomiendo usar TAG's cuando escribas código Delphi.

Al González 25-09-2007 18:04:29

¡Hola!

Alguna vez, meditando sobre POO, llegué a la conclusión de que todas las rutinas podrían ser virtuales y por lo tanto redefinibles (override). Creo que en el futuro cualquier rutina podrá ser reemplazada o complementada con una nueva versión de la misma en el contexto de una aplicación o biblioteca de programación. Pero temo que primero se adoptará el concepto de herencia insertada (de lo cual he hablado antes) y esto de la virtualidad general habrá de esperar varios años más.

Reflexionando.

Al González. :)

atani123 26-09-2007 15:58:44

A ver me explico, solo era un ejemplo, ya se como poner en mayusculas un mensaje.

Concretamente esto lo quiero utilizar o mejor dicho ya lo estoy utilizando para hacer la aplicacion multi-idioma.

Yo hago esto

MessageDlg( 'Hola amigo', mtInformation, [ mbOk], 0)

Y el sistema me mostrara el mensaje en el idioma seleccionado, sin necesidad de recompìlar codigo, ni utilizar ID que lo unico que hacen es acabarte liando.

Saludos


La franja horaria es GMT +2. Ahora son las 23:23:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi