PDA

Ver la Versión Completa : "Acerca de" en el Menu SystemControl del Formulario


dmassive
11-03-2004, 05:41:50
Como introduciria el clasico "Acerca de" en el menu SystemControl (SystemMenu)(Es el menu que tiene toda ventana (formulario) arriba a la izquierda que contiene, restaurar, mover, tamaño, minimizar, maximizar y cerrar). Gracias.

roman
11-03-2004, 05:54:36
Dicho un poco de memoria necesitas usar la función GetSystemMenu para obtener el identificador del menú de sistema, InsertMenuItem para insertar el item deseado e implementar un manejador para el mensaje WM_COMMAND de manera que puedas detectar cuándo se selecciona el nuevo ítem y desplegar entonces tu cuadro de diálogo.

// Saludos

dmassive
11-03-2004, 13:58:00
Gracias!! Aqui dejo el codigo fuente por si alguien mas lo necesita:


unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
inherited;
if Message.CmdType = $F200 then form2.ShowModal
end;

procedure TForm1.FormCreate(Sender: TObject);
var s: string;
begin
AppendMenu (GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, '');
s := '&Acerca De...';
AppendMenu(GetSystemMenu(Handle, False), MF_STRING, $F200, PChar(s));
end;
end.
:cool:

roman
12-03-2004, 16:47:15
Gracias!!

Gracias a tí. Es muy grato ver que pudiste solucionar el problema y lo compartiste con todos los demás.

// Saludos

movorack
13-03-2007, 18:19:11
está muy bien... esta chido... y agregue al menú los items que quiero...

pero no me está manejando el evento cuando hago un click sobre los items... conste que lo hice al pie de la letra.


procedure TFrmLogon.WMSysCommand(var Message: TWMSysCommand);
begin
inherited;
if Message.CmdType = $F200 then
MessageDlg('Acreca de...', mtInformation, [mbOK], 0);
end;


What's wrong???? :p

movorack
13-03-2007, 18:36:19
bueno encontre la solución a mi problem... :D

agregue a mi formulario un TApplicationEvents y en el manejador OnMessage he agregado las porciones de código de las que nos hablaba nuestro amigo dmassive:


procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if (Msg.message = WM_SYSCOMMAND) then
case Msg.wParam of
$F200: MessageDlg('Acerca de...', mtInformation, [mbOK], 0);
end;
end;


ahora si... a bailar en serio. ;)