Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Iniciantes";
Arquivo atual: 2018.03.04;
Download: [xml.tar.bz2];

Para baixo

Refazer MessageDlg Encontre agências semelhantes


gog ©   (2016-02-29 16:39) [0]

Bom dia a todos.

Decidi criar minha própria caixa de mensagem (semelhante ao MessageDlg), onde, para começar, o título da janela e os rótulos dos botões serão exibidos no idioma nacional. No futuro, é suposto introduzir outras mudanças nas ações do MessageDlg padrão. Mas me deparei com um problema desde o início.
Aqui está o texto do programa:

unidade Unit1;

interface

usos
Windows, Mensagens, SysUtils, Variantes, Classes, Gráficos, Controles, Formulários,
Caixas de diálogo, StdCtrls, MyMessageDlg;

tipo
TForm1 = classe (TForm)
Button1: TButton;
Button2: TButton;
procedimento Button1Click (Sender: TObject);
procedimento Button2Click (Sender: TObject);
privado
{Declarações privadas}
público
{Declarações públicas}
fim;

var
Form1: TForm1;

implementação

{$ R * .dfm}

procedimento TForm1.Button1Click (Sender: TObject);
começar
MessageDlg ("Olá", mtInformation, [mbYes, mbNo], 0);
end;

procedimento TForm1.Button2Click (Sender: TObject);
começar
GgMessageDlg ("Olá", mtInformation, [mbYes, mbNo], 0);
end;

final.

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

unidade MyMessageDlg;

interface

usos
Windows, Classes, Formulários, Diálogos;

recursos
{Diálogo de mensagens da Geórgia}

 SGgMsgDlgWarning     = "გაფრთხილება";
SGgMsgDlgError = "& # 4328; & # 4308; & # 4330; & # 4307; & # 4317; & # 4315; & # 4304;"
 SGgMsgDlgInformation = "ინფორმაცია";
 SGgMsgDlgConfirm     = "დადასტურება";
{
SGgMsgDlgSkip = "& # 194; & # 192; & # 204; & # 207; & # 212; & # 207; & # 197; & # 196;"
SGgMsgDlgReplace = "& # 219; & # 196; & # 221; & # 197; & # 192; & # 203; & # 196;"
SGgMsgDlgDelete = "& # 223; & # 192; & # 219; & # 192; & # 203; & # 196;"
SGgMsgDlgYes = "& # 195; & # 201; & # 192; & # 225;"
SGgMsgDlgNo = "& # 192; & # 210; & # 192;"
SGgMsgDlgOK = "Ok";
SGgMsgDlgCancel = "& # 195; & # 192; & # 225; & # 214; & # 210; & # 196;"
SGgMsgDlgHelp = "& # 195; & # 192; & # 225; & # 204; & # 192; & # 210; & # 196; & # 193; & # 192;";
 SGgMsgDlgHelpNone    = "ÀÒ ÀÒÓÄÁÏÁÓ ÃÀáÌÀÒÄÁÉÓ ×ÀÉËÉ";
 SGgMsgDlgHelpHelp    = "ÀáÌÀÒÄÁÀ";
SGgMsgDlgAbort = "& # 219; & # 196; & # 223; & # 218; & # 197; & # 201; & # 212; & # 196;"
SGgMsgDlgRetry = "& # 194; & # 192; & # 201; & # 204; & # 196; & # 207; & # 210; & # 196;"
SGgMsgDlgIgnore = "& Ignorar";
SGgMsgDlgAll = "& # 218; & # 197; & # 196; & # 203; & # 192;"
 SGgMsgDlgNoToAll     = "ÀÒÀ ÚÅÄËÀÓÈÅÉÓ";
 SGgMsgDlgYesToAll    = "ÃÉÀá ÚÅÄËÀÓÈÅÉÓ";
SGgMsgDlgShow = "& # 204; & # 192; & # 220; & # 197; & # 196; & # 205; & # 196;"
SGgMsgDlgPrint = "& # 195; & # 192; & # 193; & # 196; & # 224; & # 195; & # 196;"
 SGgMsgDlgClipboard   = "ÁÖ×ÄÒÛÉ";
}

tipo

TGgMessageForm = classe (TForm)
privado
procedimento HelpButtonClick (Sender: TObject);
público
construtor CreateNew (AOwner: TComponent);
fim;

TGgMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
TGgMsgDlgBtn = (mbSkip, mbReplace, mbDelete, mbYes, mbNo, mbOK, mbCancel,
mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll,
mbHelp, mbShow, mbPrint, mbClipboard);
TGgMsgDlgButtons = conjunto de TGgMsgDlgBtn;

var
Legendas: matriz [TGgMsgDlgType] de Pointer = (@SGgMsgDlgWarning, @SGgMsgDlgError,
@SGgMsgDlgInformation, @SGgMsgDlgConfirm, nulo);

função GgCreateMessageDialog (const Msg: string; DlgType: TGgMsgDlgType;
Botões: TGgMsgDlgButtons): TForm;

função GgMessageDlg (const Msg: string; DlgType: TGgMsgDlgType;
Botões: TGgMsgDlgButtons; HelpCtx: Longint): Inteiro; sobrecarga;

implementação

{TGgMessageForm}

procedimento TGgMessageForm.HelpButtonClick (Sender: TObject);
começar
Application.HelpContext (HelpContext);
end;

construtor TGgMessageForm.CreateNew (AOwner: TComponent);
var
NonClientMetrics: TNonClientMetrics;
começar
CreateNew herdado (AOwner);
Posição: = poScreenCenter;
end;

{GgMessageDlg}

função GgCreateMessageDialog (const Msg: string; DlgType: TGgMsgDlgType;
Botões: TGgMsgDlgButtons): TForm;

começar
Resultado: = TGgMessageForm.CreateNew (Application);
com o resultado começa

fim;
end;

função GgMessageDlg (const Msg: string; DlgType: TGgMsgDlgType;
Botões: TGgMsgDlgButtons; HelpCtx: Longint): Inteiro; sobrecarga;
começar
com GgCreateMessageDialog (Msg, DlgType, Buttons) começam
Resultado: = ShowModal;
fim;
end;

final.

Ao compilar, um erro é emitido:
Não há versão sobrecarregada de "MessageDlg" que possa ser chamada com esses argumentos

Se o manipulador Button1Click estiver comentado, tudo funcionará.
Ajude-me a descobrir onde cometo um erro? Afinal, os nomes das funções são diferentes.

Versões: Delphi XE, Win7.



NoUser ©   (2016-03-01 02:37) [1]

Escreva assim:
MessageDlg ("Hello", TMsgDlgType.mtInformation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0);

Ou no seu módulo
mtWarning, mtError, ... mbAbort, mbRetry, ...
substituir por
gmtWarning, gmtError, ... gmbAbort, gmbRetry, ...

Ou não descreva sua
TGgMsgDlgType, TGgMsgDlgBtn, TGgMsgDlgButtons
e use o "pronto"
TMsgDlgType, TMsgDlgBtn, TMsgDlgButtons



gog ©   (2016-03-01 08:41) [2]

Obrigado.
Eu entendi a essência do meu erro. Atribuiu os mesmos nomes a diferentes variáveis



Юрий Зотов ©   (2016-03-01 21:12) [3]

Mas é possível substituir tudo isso por uma linha?

MessageBox (...)



Dimka Maslov ©   (2016-03-02 18:39) [4]

E se você matar os recursos correspondentes no arquivo Consts.pas e adicioná-lo ao projeto?



Rouse_ ©   (2016-03-02 19:34) [5]


> Yuri Zotov © (01.03.16 21: 12) [3]
> Mas é possível substituir tudo isso por uma linha?
>
> MessageBox (...)

Apenas os botões 3 podem ser mostrados :)



Германн ©   (2016-03-03 01:05) [6]


> Rouse_ © (02.03.16 19: 34) [5]
>
>
>> Yuri Zotov © (01.03.16 21: 12) [3]
Citado1 >> Mas é possível substituir tudo isso por uma linha?
>>
>> MessageBox (...)
>
> Somente os botões 3 podem ser mostrados :)
>

Alguém precisa de mais de três botões? :)



sniknik ©   (2016-03-03 08:34) [7]

Sim, e mais carrapatos como "não pergunte no futuro", às vezes.



Германн ©   (2016-03-04 00:58) [8]


> sniknik © (03.03.16 08: 34) [7]
>
> sim, e até carrapatos como "não pergunte mais", às vezes.
>
>

Então é muito mais fácil escrever seu diálogo. :)



gog ©   (2016-03-04 10:29) [9]

É por isso que estou escrevendo meu diálogo.
O TLabel também substituiu o THTMLabel por ter mais opções de formatação de texto (cor, tamanho da fonte para palavras individuais, etc.).
Mas eu não conseguia entender como o MessageDlg padrão desenha um plano de fundo branco para a mensagem (Win7).



Игорь Шевченко ©   (2016-03-04 12:05) [10]


> Mas não consegui entender como é desenhado o MessageDlg padrão
> fundo branco sob a mensagem


RTFS: Dialogs.pas



gog ©   (2016-03-04 13:22) [11]

RTFS: Dialogs.pas
o que é isso
Como base, tomei Dialogs.pas



Игорь Шевченко ©   (2016-03-04 14:51) [12]


> Tomei Dialogs.pas como base


E então o que é incompreensível para você? Tudo está escrito lá, dentro



gog ©   (2016-03-07 13:11) [13]

Bem, um retângulo branco não é desenhado.
Escreveu esse código (separadamente):

procedimento TForm1.Button6Click (Sender: TObject);
var
F: TForm;
R: TRect;
começar
F: = TForm.CreateNew (aplicativo);
F.Canvas.Brush.Style:= bsSolid;
F.Canvas.Brush.Color: = clRed;
R: = Reto (0,0,50,50);
F. Tela, FillRect (R);
F.ShowModal;
F.Free;
end;

Uma forma é criada e exibida, mas não há retângulo vermelho lá. Por que eu não entendo!
Quando é o código:

procedimento TForm1.Button5Click (Sender: TObject);
começar
Canvas.Brush.Style:= bsSolid;
Canvas.Brush.Color: = clRed;
Canvas.FillRect (Rect (0,0,50,50));
end;

para a forma principal do aplicativo funciona.
O que está faltando ao criar um formulário dinamicamente?



Игорь Шевченко ©   (2016-03-07 21:44) [14]

© gog (07.03.16 13: 11) [13]


> Bem, um retângulo branco não é desenhado.


Não no momento em que você está desenhando. Tente desenhar no evento OnPaint do formulário



Германн ©   (2016-03-09 00:20) [15]


> Quando o código:
>
> procedure TForm1.Button5Click (Remetente: TObject);
> começar
> Canvas.Brush.Style:= bsSolid;
> Canvas.Brush.Color: = clRed;
> Canvas.FillRect (Rect (0,0,50,50));
> fim;
>
> para a forma principal do aplicativo funciona.

Esse código nunca funciona normalmente. E isso nunca pode funcionar normalmente.
Você realmente descobre consigo mesmo, o que deseja criar? Sua classe ou seu formulário.



Kilkennycat ©   (2016-03-09 22:53) [16]


> Este código nunca funciona normalmente.

Por que isso? Até o primeiro redesenho do formulário, ele funciona muito bem :)



Eraser ©   (2016-03-11 00:08) [17]


> gog © (29.02.16 16: 39)

quem sabe todos inventaram antes de nós? veja TTaskDialog



Страницы: 1 filial inteira

Fórum: "Iniciantes";
Arquivo atual: 2018.03.04;
Download: [xml.tar.bz2];

em cima





Memória: 0.62 MB
Hora: 0.019 c
15-1470664634
Ksergey
2016-08-08 16:57
2018.03.04
Escrita maia


2-1457082837
convidado
2016-03-04 12:13
2018.03.04
TOutlookApplication e atrasos no Outlook ...


2-1456844768
Mishan
2016-03-01 18:06
2018.03.04
Pergunta SQL


2-1456757874
Dmitry
2016-02-29 17:57
2018.03.04
Problemas com o tempo


2-1458046128
Macaque
2016-03-15 15:48
2018.03.04
Criando Tópicos





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese Romeno Russa sérvio Slovak esloveno Espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol