unit DDispLogoMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, DDispLogo, Vcl.ComCtrls, Vcl.Buttons, Vcl.ExtCtrls; type TDlgDispLogoMain = class(TForm) OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; pnClient: TPanel; mmText: TMemo; FontDialog: TFontDialog; pnLeft: TPanel; GroupBox1: TGroupBox; Label4: TLabel; Label1: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label2: TLabel; btnSelFont: TSpeedButton; Label12: TLabel; rdTxtLeft: TRadioButton; rdTxtCenter: TRadioButton; rdTxtRight: TRadioButton; pnPos2: TPanel; rdTxtUp: TRadioButton; rdTxtCenter2: TRadioButton; rdTxtDown: TRadioButton; crbText: TColorBox; crbBg: TColorBox; edDtFormat: TEdit; chDefDateTime: TCheckBox; edOri: TEdit; edOriTop: TEdit; edTimeIntvSec: TEdit; edFont: TEdit; GroupBox2: TGroupBox; Label5: TLabel; Label6: TLabel; btnImgOpen: TSpeedButton; rdImgLeft: TRadioButton; rdImgCenter1: TRadioButton; rdImgRight: TRadioButton; Panel1: TPanel; rdImgUp: TRadioButton; rdImgCenter2: TRadioButton; rdImgDown: TRadioButton; edImgPath: TEdit; GroupBox3: TGroupBox; lbAlpha: TLabel; tbAlpha: TTrackBar; chTaskbarDetect: TCheckBox; btnShowLogo: TButton; btnExportSet: TButton; btnImportSet: TButton; btnSetText: TSpeedButton; procedure btnShowLogoClick(Sender: TObject); procedure edTextKeyPress(Sender: TObject; var Key: Char); procedure tbAlphaChange(Sender: TObject); procedure rdTxtLeftClick(Sender: TObject); procedure btnImgOpenClick(Sender: TObject); procedure btnSetTextClick(Sender: TObject); procedure crbBgChange(Sender: TObject); procedure chDefDateTimeClick(Sender: TObject); procedure edOriKeyPress(Sender: TObject; var Key: Char); procedure btnExportSetClick(Sender: TObject); procedure btnImportSetClick(Sender: TObject); procedure btnSelFontClick(Sender: TObject); private { Private declarations } DispLogos_: TDlgDispLogoList; procedure UpdateLogo; public { Public declarations } Constructor Create(aOwner: TComponent); override; Destructor Destroy; override; end; var DlgDispLogoMain: TDlgDispLogoMain; implementation uses Tocsg.WinInfo, Tocsg.WTS, superobject, Tocsg.Convert, CrmLogger, Vcl.Clipbrd, Tocsg.Safe, DImportData, Soap.EncdDecd, Tocsg.Strings, Tocsg.Path; {$R *.dfm} Constructor TDlgDispLogoMain.Create(aOwner: TComponent); begin Inherited Create(aOwner); DispLogos_ := TDlgDispLogoList.Create; mmText.Lines.Add(GetComName + '\' + WTS_GetCurrentUserName); mmText.Lines.Add('{DateTime}'); edFont.Text := mmText.Font.Name; end; Destructor TDlgDispLogoMain.Destroy; begin FreeAndNil(DispLogos_); Inherited; end; procedure TDlgDispLogoMain.edOriKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin Key := #0; UpdateLogo; exit; end; end; procedure TDlgDispLogoMain.edTextKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin Key := #0; UpdateLogo; exit; end; end; procedure TDlgDispLogoMain.rdTxtLeftClick(Sender: TObject); begin UpdateLogo; end; procedure TDlgDispLogoMain.tbAlphaChange(Sender: TObject); begin if DispLogos_.Count > 0 then DispLogos_.SetAlpha(tbAlpha.Position); lbAlpha.Caption := Format('투명도(%d) :', [tbAlpha.Position]); end; procedure TDlgDispLogoMain.UpdateLogo; var nPos1, nPos2: Integer; sDtFormat: String; begin if DispLogos_.Count > 0 then begin // mmText.Text := Trim(mmText.Text); edTimeIntvSec.Text := Trim(edTimeIntvSec.Text); if rdTxtLeft.Checked then nPos1 := 1 else if rdTxtRight.Checked then nPos1 := 2 else nPos1 := 3; if rdTxtUp.Checked then nPos2 := 1 else if rdTxtDown.Checked then nPos2 := 2 else nPos2 := 3; if chDefDateTime.Checked then sDtFormat := '' else sDtFormat := Trim(edDtFormat.Text); DispLogos_.SetText(mmText.Text, mmText.Font, nPos1, nPos2, StrToIntDef(edOri.Text, 0), StrToIntDef(edOriTop.Text, 0), crbText.Selected, crbBg.Selected, sDtFormat, StrToIntDef(edTimeIntvSec.Text, 0)); if rdImgLeft.Checked then nPos1 := 1 else if rdImgRight.Checked then nPos1 := 2 else nPos1 := 3; if rdImgUp.Checked then nPos2 := 1 else if rdImgDown.Checked then nPos2 := 2 else nPos2 := 3; DispLogos_.SetImage(edImgPath.Text, nPos1, nPos2); DispLogos_.SetAlpha(tbAlpha.Position); DispLogos_.SetTaskbarDetect(chTaskbarDetect.Checked); end; end; procedure TDlgDispLogoMain.btnExportSetClick(Sender: TObject); var O, OFont: ISuperObject; nPos1, nPos2: Integer; sTemp, sDtFormat: String; CB: TClipboard; begin try O := SO; if rdTxtLeft.Checked then nPos1 := 1 else if rdTxtRight.Checked then nPos1 := 2 else nPos1 := 3; if rdTxtUp.Checked then nPos2 := 1 else if rdTxtDown.Checked then nPos2 := 2 else nPos2 := 3; if chDefDateTime.Checked then sDtFormat := '' else sDtFormat := Trim(edDtFormat.Text); DispLogos_.SetText(mmText.Text, mmText.Font, nPos1, nPos2, StrToIntDef(edOri.Text, 0), StrToIntDef(edOriTop.Text, 0), crbText.Selected, crbBg.Selected, sDtFormat, StrToIntDef(edTimeIntvSec.Text, 0)); O.I['TxHPos'] := nPos1; O.I['TxVPos'] := nPos2; if sDtFormat <> '' then O.S['TxDtFmt'] := sDtFormat; OFont := SO; OFont.S['Name'] := mmText.Font.Name; OFont.I['Size'] := mmText.Font.Size; OFont.I['Color'] := mmText.Font.Color; OFont.I['Style'] := TTgRtti.SetTypeToInt64(mmText.Font.Style); O.O['TxFont'] := OFont; sTemp := StringReplace(mmText.Text, #13#10, '|*|', [rfReplaceAll]); sTemp := StringReplace(sTemp, ' ', '§', [rfReplaceAll]); O.S['TxStr'] := sTemp; O.I['TxOri'] := StrToIntDef(edOri.Text, 0); O.I['TxOriT'] := StrToIntDef(edOriTop.Text, 0); O.I['TxCol'] := ULONGLONG(crbText.Selected); O.I['TxColB'] := ULONGLONG(crbBg.Selected); O.I['Alpha'] := tbAlpha.Position; if chTaskbarDetect.Checked then O.B['TBar'] := true; if FileExists(edImgPath.Text) then begin if rdImgLeft.Checked then nPos1 := 1 else if rdImgRight.Checked then nPos1 := 2 else nPos1 := 3; if rdImgUp.Checked then nPos2 := 1 else if rdImgDown.Checked then nPos2 := 2 else nPos2 := 3; O.I['ImHPos'] := nPos1; O.I['ImVPos'] := nPos2; O.S['ImData'] := FileToBase64(edImgPath.Text); end; Guard(CB, TClipboard.Create); CB.AsText := EncryptStrToBase64(O.AsString); MessageBox(Handle, PChar('설정값이 클립보드에 복사되었습니다.'), PChar(Caption), MB_ICONINFORMATION or MB_OK); except MessageBox(Handle, PChar('내보내기를 시도 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK); end; end; procedure TDlgDispLogoMain.btnImgOpenClick(Sender: TObject); begin OpenDialog.FileName := ''; if OpenDialog.Execute(Handle) then begin edImgPath.Text := OpenDialog.FileName; if DispLogos_.Count > 0 then UpdateLogo; end; end; procedure TDlgDispLogoMain.btnImportSetClick(Sender: TObject); var dlg: TDlgImportData; O: ISuperObject; sTemp: String; begin Guard(dlg, TDlgImportData.Create(Self)); if dlg.ShowModal <> mrOk then exit; try O := SO(DecryptStr(dlg.mmInfo.Text)); case O.I['TxHPos'] of 1 : rdTxtLeft.Checked := true; 2 : rdTxtRight.Checked := true; else rdTxtCenter.Checked := true; end; case O.I['TxVPos'] of 1 : rdTxtUp.Checked := true; 2 : rdTxtDown.Checked := true; else rdTxtCenter2.Checked := true; end; if O.S['TxDtFmt'] <> '' then edDtFormat.Text := O.S['TxDtFmt']; if O.O['TxFont'] <> nil then begin try mmText.Font.Name := O.O['TxFont'].S['Name']; mmText.Font.Size := O.O['TxFont'].I['Size']; mmText.Font.Color := O.O['TxFont'].I['Color']; mmText.Font.Style := TTgRtti.Int64ToSetType(O.O['TxFont'].I['Style']); except MessageBox(Handle, PChar('폰트 정보를 블러오는중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK); end; end; sTemp := StringReplace(O.S['TxStr'], '§', ' ', [rfReplaceAll]); sTemp := StringReplace(sTemp, '|*|', #13#10, [rfReplaceAll]); mmText.Text := sTemp; edOri.Text := IntToStr(O.I['TxOri']); edOriTop.Text := IntToStr(O.I['TxOriT']); crbText.Selected := O.I['TxCol']; crbBg.Selected := O.I['TxColB']; tbAlpha.Position := O.I['Alpha']; chTaskbarDetect.Checked := O.B['TBar']; if O.S['ImData'] <> '' then begin if MessageBox(Handle, PChar('이미지 데이터가 포함되어 있습니다.'+#13+#10+'파일을 생성 후 추가 하시겠습니까?'), PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDYES then begin if SaveDialog.Execute(Handle) then begin var ms: TMemoryStream; Guard(ms, TMemoryStream.Create); var pBuf: TBytes := DecodeBase64(O.S['ImData']); ms.Write(pBuf[0], Length(pBuf)); ms.SaveToFile(SaveDialog.FileName); case O.I['ImHPos'] of 1 : rdImgLeft.Checked := true; 2 : rdImgRight.Checked := true; else rdImgCenter1.Checked := true; end; case O.I['ImVPos'] of 1 : rdImgUp.Checked := true; 2 : rdImgDown.Checked := true; else rdImgCenter2.Checked := true; end; edImgPath.Text := SaveDialog.FileName; end; end; end; if DispLogos_.Count > 0 then UpdateLogo else btnShowLogo.Click; except MessageBox(Handle, PChar('설정값을 가져오는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; end; procedure TDlgDispLogoMain.btnSelFontClick(Sender: TObject); begin FontDialog.Font.Assign(mmText.Font); if FontDialog.Execute(Handle) then begin edFont.Text := FontDialog.Font.Name; mmText.Font.Assign(FontDialog.Font); crbText.Selected := mmText.Font.Color; UpdateLogo; end; end; procedure TDlgDispLogoMain.btnSetTextClick(Sender: TObject); begin UpdateLogo; end; procedure TDlgDispLogoMain.btnShowLogoClick(Sender: TObject); begin if DispLogos_.Count = 0 then begin {$IF true} DispLogos_.CreateLogos; var F: TFont; Guard(F, TFont.Create); F.Name := 'Tahoma'; F.Size := 26; var sTemp := GetRunExePathDir + 'CI.bmp'; if FileExists(sTemp) then DispLogos_.SetImage(sTemp, 3, 3); sTemp := ''; SumString(sTemp, '{DateTime}' {DateTimeToStr(Now)}, ' '); SumString(sTemp, 'kku', ' '); SumString(sTemp, '김구진', ' '); DispLogos_.SetTaskbarDetect(true); DispLogos_.SetTextWEL(sTemp, 3, F, 3, 3, 250, clBlack, clSilver, 'yyyy-mm-dd hh:nn:ss', 0); DispLogos_.SetAlpha(20); {$ELSE} edImgPath.Text := Trim(edImgPath.Text); if (edImgPath.Text <> '') and not FileExists(edImgPath.Text) then begin MessageBox(Handle, PChar('이미지 파일이 존재하지 않습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; DispLogos_.CreateLogos; UpdateLogo; btnShowLogo.Caption := '상시로고 끄기'; btnSetText.Visible := true; {$IFEND} end else begin DispLogos_.Clear; btnSetText.Visible := false; btnShowLogo.Caption := '상시로고 켜기'; end; Application.ProcessMessages; end; procedure TDlgDispLogoMain.chDefDateTimeClick(Sender: TObject); begin UpdateLogo; edDtFormat.Enabled := not chDefDateTime.Checked; end; procedure TDlgDispLogoMain.crbBgChange(Sender: TObject); begin mmText.Font.Color := crbText.Selected; UpdateLogo; end; end.