AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte LogMessageDlg - Erweiterung der MessageDLG-Funktion um einen Logeintrag
Thema durchsuchen
Ansicht
Themen-Optionen

LogMessageDlg - Erweiterung der MessageDLG-Funktion um einen Logeintrag

Ein Thema von Delphi-Delphin · begonnen am 13. Mär 2017 · letzter Beitrag vom 14. Mär 2017
Antwort Antwort
Delphi-Delphin

Registriert seit: 23. Feb 2010
10 Beiträge
 
FreePascal / Lazarus
 
#1

LogMessageDlg - Erweiterung der MessageDLG-Funktion um einen Logeintrag

  Alt 13. Mär 2017, 17:42
Hallo,

Ich war jetzt schon recht lange nicht mehr hier aktiv, hab aber immer mal nach nützlichen Funktionen gesucht.
Ich bin zwar schon vor längerer Zeit auf Lazarus umgestiegen, da es aktueller und plattformunabhängig ist, aber der Code lässt sich meistens recht gut übernehmen.

Nun möchte ich hier auch eine nützliche Funktion einbringen. Diese werde ich auch im Delphi-Treff veröffentlichen.
@Mods: Wenn das Unterforum nicht passt bitte verschieben.

Da ich für ein Forensiktool auf eine recht detaillierte Aufzeichung der Programmbedienung angewiesen bin, habe ich die normale MessageDlg-Funktion(en) um eine Erstellung von Logeinträgen erweitert.
Es sollten alle Argumentkombinationen der Originalfunktion, welche ja überladen ist enthalten sein.

Am Aufruf der Funktionen ist als erster Parameter die Eventlogkomponente dazugekommen. Danach folgen die normalen MessageDlg-Parameter und am Schluss ein optionaler Parameter, um den Logeintrag mit "false" zu deaktivieren.
Das ModalResult der Message wird als Result durchgereicht.

Delphi-Quellcode:
unit LogDialogs;
//LogMessageDlg-functions

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Dialogs, eventlog, Forms;

function LogMessageDlg(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; LogThis: boolean=True): TModalResult; overload;
function LogMessageDlg(Eventlog: TEventlog; const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; LogThis: boolean=True): TModalResult; overload;
function LogMessageDlg(Eventlog: TEventlog; const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn; LogThis: boolean=True): TModalResult; overload;
function LogMessageDlg(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn; LogThis: boolean=True): TModalResult; overload;
function LogMessageDlg(Eventlog: TEventlog; const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; const HelpKeyword: string; LogThis: boolean=True): TModalResult; overload;
function LogMessageDlgPos(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; LogThis: boolean=True): TModalResult; overload;
function LogMessageDlgPosHelp(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
            const HelpFileName: string; LogThis: boolean=True): TModalResult; overload;

implementation

(*
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint): TModalResult; overload;
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint): TModalResult; overload;
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): TModalResult; overload;
function MessageDlg(const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): TModalResult; overload;
function MessageDlg(const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; const HelpKeyword: string): TModalResult; overload;
function MessageDlgPos(const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): TModalResult; overload;
function MessageDlgPosHelp(const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
            const HelpFileName: string): TModalResult; overload;
*)


function MsgDlgTypeToString(MsgDlgType: TMsgDlgType): string;
begin
  Case MsgDlgType of
    mtWarning: Result:='mtWarning';
    mtError: Result:='mtError';
    mtInformation: Result:='mtInformation';
    mtConfirmation: Result:='mtConfirmation';
    mtCustom: Result:='mtCustom';
  end;
end;

function MsgDlgButtonsToString(MsgDlgButtons: TMsgDlgButtons): String;
var s: String;
begin
  s := '';
  if mbYes in MsgDlgButtons
    then
      s := s + ',mbYes';
  if mbNo in MsgDlgButtons
    then
      s := s + ',mbNo';
  if mbOK in MsgDlgButtons
    then
      s := s + ',mbOK';
  if mbCancel in MsgDlgButtons
    then
      s := s + ',mbCancel';
  if mbAbort in MsgDlgButtons
    then
      s := s + ',mbAbort';
  if mbRetry in MsgDlgButtons
    then
      s := s + ',mbRetry';
  if mbIgnore in MsgDlgButtons
    then
      s := s + ',mbIgnore';
  if mbAll in MsgDlgButtons
    then
      s := s + ',mbAll';
  if mbNoToAll in MsgDlgButtons
    then
      s := s + ',mbNoToAll';
  if mbYesToAll in MsgDlgButtons
    then
      s := s + ',mbYesToAll';
  if mbHelp in MsgDlgButtons
    then
      s := s + ',mbHelp';
  if mbClose in MsgDlgButtons
    then
      s := s + ',mbClose';

  Result := '['+Copy(s,2,Length(s)-1)+']';
end;

function ModalResultToString(ModalResult: TModalResult): string;
begin
  Case ModalResult of
    0: Result:='mrNone';
    1: Result:='mrOK';
    2: Result:='mrCancel';
    3: Result:='mrAbort';
    4: Result:='mrRetry';
    5: Result:='mrIgnore';
    6: Result:='mrYes';
    7: Result:='mrNo';
    8: Result:='mrAll';
    9: Result:='mrNoToAll';
    10: Result:='mrYesToAll';
    11: Result:='mrClose';
  end;
end;

(*
  Eventlog.LogType = etCustom,etInfo,etWarning,etError,etDebug
  TMsgDlgType    = (mtWarning, mtError, mtInformation, mtConfirmation,
                    mtCustom);
  TMsgDlgBtn    = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
                    mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
  TMsgDlgButtons = set of TMsgDlgBtn;
*)



function LogMessageDlg(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlg(aMsg, DlgType, Buttons, HelpCtx);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;

function LogMessageDlg(Eventlog: TEventlog; const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlg(aCaption, aMsg, DlgType, Buttons, HelpCtx);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Caption: "'+aCaption+'", Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;

function LogMessageDlg(Eventlog: TEventlog; const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlg(aCaption, aMsg, DlgType, Buttons, HelpCtx, DefaultButton);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Caption: "'+aCaption+'", Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;

function LogMessageDlg(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlg(aMsg, DlgType, Buttons, HelpCtx, DefaultButton);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;

function LogMessageDlg(Eventlog: TEventlog; const aCaption, aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; const HelpKeyword: string; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlg(aCaption, aMsg, DlgType, Buttons, HelpKeyword);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Caption: "'+aCaption+'", Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;

function LogMessageDlgPos(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlgPos(aMsg, DlgType, Buttons, HelpCtx, X, Y);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;

function LogMessageDlgPosHelp(Eventlog: TEventlog; const aMsg: string; DlgType: TMsgDlgType;
            Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
            const HelpFileName: string; LogThis: boolean=True): TModalResult; overload;
var Answer: TModalResult;
begin
  Answer := MessageDlgPosHelp(aMsg, DlgType, Buttons, HelpCtx, x, y, HelpFileName);

  if LogThis
    then
      Eventlog.Log(etInfo,'Messagetype: '+MsgDlgTypeToString(DlgType)+', Message: "'+aMsg+'", Buttons: '+MsgDlgButtonsToString(Buttons)+', Answer: '+ModalResultToString(Answer));

  Result := Answer;
end;


end.
Wer Fehler oder Verbesserungen findet, einfach hier unten schreiben.

Möglicher Funtionsaufruf:
Delphi-Quellcode:
  EventLog1.Active:=True;
  LogMessageDlg(Eventlog1,'Test',mtConfirmation,[mbYes,mbNo],0);
  LogMessageDlg(Eventlog1,'Fehler','Es ist ein Fehler aufgetreten!',mtError,[mbOK],0);
Logeinträge sehen z.B. so aus:
Code:
lazarus [2017-03-13 18:11:03.057 Info] Messagetype: mtConfirmation, Message: "Test", Buttons: [mbYes,mbNo], Answer: mrNo
lazarus [2017-03-13 18:11:06.037 Info] Messagetype: mtError, Caption: "Fehler", Message: "Es ist ein Fehler aufgetreten!", Buttons: [mbOK], Answer: mrOK
mfg.
Künstliche Intelligenz ist gar nichts - verglichen mit natürlicher Dummheit
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: LogMessageDlg - Erweiterung der MessageDLG-Funktion um einen Logeintrag

  Alt 14. Mär 2017, 06:06
Hallo,
warum steht die Event-Komponente nicht hinter den Standard-Argumenten,
dann gleich noch mit = nil als Default-Parameter und man kann den Dialog auch optional ohne Logging verwenden,
indem man sogar die Event-Komponente beim Aufruf weglassen kann.
Ausserdem muss man dann nicht sämtliche Aufruf-Parameter im Programm ersetzen, sondern ändert erst mal nur den Namen der Prozedur.
Heiko
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
939 Beiträge
 
#3

AW: LogMessageDlg - Erweiterung der MessageDLG-Funktion um einen Logeintrag

  Alt 14. Mär 2017, 07:07
Hallo,
warum steht die Event-Komponente nicht hinter den Standard-Argumenten,
dann gleich noch mit = nil als Default-Parameter und man kann den Dialog auch optional ohne Logging verwenden,
indem man sogar die Event-Komponente beim Aufruf weglassen kann.
Ausserdem muss man dann nicht sämtliche Aufruf-Parameter im Programm ersetzen, sondern ändert erst mal nur den Namen der Prozedur.
Was außerdem den Vorteil hätte, dass man sich den Parameter LogThis sparen könnte. if EventLog<>nil then ... statt if LogThis then ...
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.739 Beiträge
 
Delphi 2007 Professional
 
#4

AW: LogMessageDlg - Erweiterung der MessageDLG-Funktion um einen Logeintrag

  Alt 14. Mär 2017, 07:12
Kleine Randbemerkung: MsgDlgTypeToString und MsgDlgButtonsToString könntest du mit System.TypInfo.GetEnumName und "for Low(...) to High(...)" vereinfachen.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz