FrmSysLogF.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "FrmSysLogF.h"
  5. #include "VMSCommLibF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma resource "*.dfm"
  9. TFrmSysLog *FrmSysLog = NULL;
  10. //---------------------------------------------------------------------------
  11. __fastcall TFrmSysLog::TFrmSysLog(TComponent* Owner)
  12. : TForm(Owner)
  13. {
  14. reMsg->Lines->Clear();
  15. FPause = true;
  16. chkLogPause->Checked = FPause;
  17. }
  18. //---------------------------------------------------------------------------
  19. void __fastcall TFrmSysLog::btnClearClick(TObject *Sender)
  20. {
  21. try
  22. {
  23. reMsg->Lines->Clear();
  24. Application->ProcessMessages();
  25. }
  26. catch(Exception &e)
  27. {
  28. }
  29. }
  30. //---------------------------------------------------------------------------
  31. void __fastcall TFrmSysLog::btnCopyClick(TObject *Sender)
  32. {
  33. try
  34. {
  35. reMsg->SelectAll();
  36. reMsg->CopyToClipboard();
  37. Application->ProcessMessages();
  38. }
  39. catch(Exception &e)
  40. {
  41. }
  42. }
  43. //---------------------------------------------------------------------------
  44. void __fastcall TFrmSysLog::OnWMLogDisplayMessage(TMessage &Msg)
  45. {
  46. if (!Showing) return;
  47. if (chkLogPause->Checked) return;
  48. IPC_LOG_MESSAGE *pLog = (IPC_LOG_MESSAGE *)Msg.WParam;
  49. if (pLog)
  50. {
  51. #if 0
  52. IPC_LOG_MESSAGE Log;
  53. Log.Kind = pLog->Kind;
  54. Log.Flag = pLog->Flag;
  55. Log.Len = pLog->Len;
  56. Log.Tm = pLog->Tm;
  57. memcpy(Log.Msg, pLog->Msg, sizeof(Log.Msg));
  58. //ReplyMessage(0);
  59. LogWrite(&Log);
  60. #else
  61. //ReplyMessage(0);
  62. LogWrite(pLog);
  63. #endif
  64. }
  65. }
  66. //---------------------------------------------------------------------------
  67. void TFrmSysLog::LogWrite(IPC_LOG_MESSAGE *ALog)
  68. {
  69. if (!ALog) return;
  70. try
  71. {
  72. //reMsg->Lines->BeginUpdate();
  73. AnsiString sLogKind = " [XXX] ";
  74. switch(ALog->Kind)
  75. {
  76. case eLOG_INFO : sLogKind = " [INF] "; break;
  77. case eLOG_DATA : sLogKind = " [DAT] "; break;
  78. case eLOG_ERROR : sLogKind = " [ERR] "; break;
  79. case eLOG_WARNING: sLogKind = " [WAN] "; break;
  80. case eLOG_DEBUG : sLogKind = " [DBG] "; break;
  81. case eLOG_DETAIL : sLogKind = " [DET] "; break;
  82. }
  83. try
  84. {
  85. #if 0
  86. while (reMsg->Lines->Count >= g_AppCfg.nMaxLogLines)
  87. reMsg->Lines->Delete(0);
  88. #else
  89. if (reMsg->Lines->Count >= g_AppCfg.nMaxLogLines)
  90. {
  91. reMsg->Lines->Clear();
  92. }
  93. #endif
  94. reMsg->Lines->Add(ALog->Tm.FormatString("hh:nn:ss") + "." + Now().FormatString("ss") + sLogKind + String(ALog->Msg));
  95. //reMsg->Lines->Add(ALog->Tm.FormatString("hh:nn:ss") + "." + Now().FormatString("ss") + String(ALog->Msg));
  96. //reMsg->Lines->Add(ALog->Tm.FormatString("hh:nn:ss") + "[" + Now().FormatString("ss") + "]" + String(ALog->Msg));
  97. Application->ProcessMessages();
  98. }
  99. catch(Exception &e)
  100. {
  101. }
  102. }
  103. __finally
  104. {
  105. //reMsg->Lines->EndUpdate();
  106. //SendMessage(reMsg->Handle, EM_SCROLLCARET, 0, 0);
  107. //reMsg->Perform(EM_SCROLLCARET, 0, 0);
  108. //Application->ProcessMessages();
  109. }
  110. }
  111. //---------------------------------------------------------------------------
  112. void __fastcall TFrmSysLog::FormShow(TObject *Sender)
  113. {
  114. Application->ProcessMessages();
  115. reMsg->Lines->Add( Now().FormatString("hh:nn:ss") + "." + Now().FormatString("ss") + " ***** Starting program...");
  116. }
  117. //---------------------------------------------------------------------------
  118. void TFrmSysLog::DisplayMsg(String& AMsg)
  119. {
  120. if (chkLogPause->Checked) return;
  121. if (!Showing) return;
  122. if (reMsg->Lines->Count >= g_AppCfg.nMaxLogLines)
  123. reMsg->Lines->Clear();
  124. if (AMsg != "")
  125. {
  126. AMsg[AMsg.Length()-1] = 0; // 마지막줄의 CRLF 삭제. 그래야 메모장에서는 줄간 간격이 떨어지지 않게 찍힌다.
  127. reMsg->Lines->Add(AMsg);
  128. }
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TFrmSysLog::chkLogPauseClick(TObject *Sender)
  132. {
  133. FPause = chkLogPause->Checked;
  134. }
  135. //---------------------------------------------------------------------------