unit SettingsDlg; interface uses Windows, Messages, SysUtils, Classes, CommCtrl, ComObj, ActiveX, Widgets, GdipApi, WinInet, InetThrd, GdipObj, Contnrs, WIniFiles, MMSystem, InetUtil, WStrings, ShellApi, ShlObj; { SettingsDlgProc } function SettingsDlgProc(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; stdcall; implementation uses WidgetMain, Variants, DialogRes; const IDS_CAPTION = 3000; IDS_GROUPBOX = 3001; IDS_LANGUAGE = 3002; IDS_ENABLE_TRACKER = 3003; IDS_TRACKER_ID = 3004; IDS_TRACKER_TITLE = 3005; IDS_REFRESH = 3006; IDS_ALWAYS_TOP = 3007; IDS_IGNORE_MOUSE = 3008; IDS_PREVENT_DRAGGING = 3009; IDS_TRANSPARENCY = 3010; IDS_COLOR = 3011; IDC_LANGUAGE = 1000; IDC_ENABLE_TRACKER = 1001; IDE_TRACKER_ID = 1002; IDE_TRACKER_TITLE = 1003; IDE_REFRESH = 1004; IDC_ALWAYSTOP = 1005; IDC_IGNORE_MOUSE = 1006; IDC_PREVENT_DRAGGING = 1007; IDC_TRANSPARENCY = 1008; IDC_COLOR = 1009; { OnChangeLang } function OnChangeLang(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); SetWindowTextW(hDlg, PWideChar(WLang[IDS_CAPTION])); SetWindowTextW(GetDlgItem(hDlg, IDS_GROUPBOX), PWideChar(WLang[IDS_GROUPBOX])); SetWindowTextW(GetDlgItem(hDlg, IDS_LANGUAGE), PWideChar(WLang[IDS_LANGUAGE])); SetWindowTextW(GetDlgItem(hDlg, IDS_ENABLE_TRACKER), PWideChar(WLang[IDS_ENABLE_TRACKER])); SetWindowTextW(GetDlgItem(hDlg, IDS_TRACKER_ID), PWideChar(WLang[IDS_TRACKER_ID])); SetWindowTextW(GetDlgItem(hDlg, IDS_TRACKER_TITLE), PWideChar(WLang[IDS_TRACKER_TITLE])); SetWindowTextW(GetDlgItem(hDlg, IDS_REFRESH), PWideChar(WLang[IDS_REFRESH])); SetWindowTextW(GetDlgItem(hDlg, IDS_ALWAYS_TOP), PWideChar(WLang[IDS_ALWAYS_TOP])); SetWindowTextW(GetDlgItem(hDlg, IDS_IGNORE_MOUSE), PWideChar(WLang[IDS_IGNORE_MOUSE])); SetWindowTextW(GetDlgItem(hDlg, IDS_PREVENT_DRAGGING), PWideChar(WLang[IDS_PREVENT_DRAGGING])); SetWindowTextW(GetDlgItem(hDlg, IDS_TRANSPARENCY), PWideChar(WLang[IDS_TRANSPARENCY])); SetWindowTextW(GetDlgItem(hDlg, IDOK), PWideChar(WLang[ID_OK])); SetWindowTextW(GetDlgItem(hDlg, IDCANCEL), PWideChar(WLang[IDCANCEL])); end; { OnInit } function OnInit(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var WidgetForm: TWidgetMainForm; { HexColor: WideString; TextColor: Cardinal; } begin Result := LRESULT(True); CenterDesktop(hDlg); SetPropW(hDlg, MakeIntAtomW(DialogAtom), lParam); WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); WidgetForm.DialogHandle := hDlg; OnChangeLang(hDlg, uMsg, wParam, lParam); SetWindowTextW(GetDlgItem(hDlg, IDE_TRACKER_ID), PWideChar(WidgetForm.AmungusID)); SetWindowTextW(GetDlgItem(hDlg, IDE_TRACKER_TITLE), PWideChar(WidgetForm.Title)); SetWindowTextW(GetDlgItem(hDlg, IDE_REFRESH), PWideChar(WideFormat('%d', [WidgetForm.Interval div 1000]))); CheckDlgButton(hDlg, IDC_ENABLE_TRACKER, CBtnChecks[WidgetForm.EnableTracker]); CheckDlgButton(hDlg, IDC_ALWAYSTOP, CBtnChecks[WidgetForm.AlwaysTop]); CheckDlgButton(hDlg, IDC_IGNORE_MOUSE, CBtnChecks[WidgetForm.IgnoreMouse]); CheckDlgButton(hDlg, IDC_PREVENT_DRAGGING, CBtnChecks[WidgetForm.PreventDragging]); SendDlgItemMessage(hDlg, IDC_TRANSPARENCY, TBM_SETRANGE, Integer(True), MakeLong(20, $FF)); SendDlgItemMessage(hDlg, IDC_TRANSPARENCY, TBM_SETPOS, Integer(True), $FF - WidgetForm.OpacityMax + 20); { TextColor := $FFFFFF - WidgetForm.BackColor; HexColor := WideFormat('#%6x', [TextColor]); SetWindowTextW(GetDlgItem(hDlg, IDC_COLOR), PWideChar(HexColor)); } { Index := 0; for I := 0 to WLang.FNames.Count - 1 do begin Language := WLang.FNames.Values[WLang.FNames.Names[I]]; if WidgetForm.Language = Language then Index := I; SendMessageW(GetDlgItem(hDlg, IDC_LANGUAGE), CB_ADDSTRING, 0, Integer(PWideChar(WLang.FNames.Names[I]))); end; SendMessageW(GetDlgItem(hDlg, IDC_LANGUAGE), CB_SETCURSEL, Index, 0); } SetForegroundWindow(hDlg); SetActiveWindow(hDlg); end; { OnDestroy } function OnDestroy(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var WidgetForm: TWidgetMainForm; begin Result := LRESULT(True); WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); WidgetForm.DialogHandle := 0; RemovePropW(hDlg, MakeIntAtomW(DialogAtom)); end; { OnNotify } function OnNotify(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); end; { OnClicked } function OnClicked(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); end; { OnOK } function OnOK(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var AAmungusID: WideString; Changed: Boolean; WidgetForm: TWidgetMainForm; begin Result := LRESULT(True); AAmungusID := GetText(GetDlgItem(hDlg, IDE_TRACKER_ID)); if Length(AAmungusID) = 0 then begin MessageBoxW(hDlg, PWideChar(WLang[IDS_TEXT_1009]), PWideChar(WLang[IDS_TEXT_1004]), MB_ICONHAND); SetFocus(GetDlgItem(hDlg, IDE_TRACKER_ID)); Exit; end; WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); WidgetForm.OpacityMax := $FF - SendDlgItemMessage(hDlg, IDC_TRANSPARENCY, TBM_GETPOS, 0, 0) + 20; WidgetForm.EnableTracker := IsDlgButtonChecked(hDlg, IDC_ENABLE_TRACKER) = BST_CHECKED; WidgetForm.AlwaysTop := IsDlgButtonChecked(hDlg, IDC_ALWAYSTOP) = BST_CHECKED; WidgetForm.ChangeAlwaysTop(WidgetForm.AlwaysTop); WidgetForm.IgnoreMouse := IsDlgButtonChecked(hDlg, IDC_IGNORE_MOUSE) = BST_CHECKED; WidgetForm.ChangeIgnoreMouse(WidgetForm.IgnoreMouse); WidgetForm.PreventDragging := IsDlgButtonChecked(hDlg, IDC_PREVENT_DRAGGING) = BST_CHECKED; WidgetForm.ChangePreventDragging(WidgetForm.PreventDragging); Changed := (AAmungusID <> WidgetForm.AmungusID) and WidgetForm.EnableTracker; WidgetForm.AmungusID := AAmungusID; WidgetForm.Title := GetText(GetDlgItem(hDlg, IDE_TRACKER_TITLE)); WidgetForm.TitleLabel.Caption := WidgetForm.Title; WidgetForm.Interval := StrToIntDef(GetText(GetDlgItem(hDlg, IDE_REFRESH)), 20); if WidgetForm.Interval <= 0 then WidgetForm.Interval := 20; WidgetForm.Interval := WidgetForm.Interval * 1000; WidgetForm.Update; if Changed then WidgetForm.RefreshTimerExecute(WidgetForm); //WidgetForm.FirstTime := False; EndDialog(hDlg, IDOK); end; { OnCancel } function OnCancel(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var WidgetForm: TWidgetMainForm; begin Result := LRESULT(True); WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); //WidgetForm.FirstTime := False; WidgetForm.Opacity := WidgetForm.OpacityMax; WidgetForm.Update; EndDialog(hDlg, IDCANCEL); end; { OnSelChange } function OnSelChange(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(False); end; { OnCommand } function OnCommand(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); case HIWORD(wParam) of //BN_CLICKED: OnClicked(hDlg, uMsg, wParam, lParam); CBN_SELCHANGE: OnSelChange(hDlg, uMsg, wParam, lParam); end; case LOWORD(wParam) of IDOK: Result := OnOK(hDlg, uMsg, wParam, lParam); IDCANCEL: Result := OnCancel(hDlg, uMsg, wParam, lParam); end; end; var Brush: HBRUSH= 0; { OnCtlColorStatic } function OnCtlColorStatic(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var WidgetForm: TWidgetMainForm; begin Result := LRESULT(False); if GetDlgItem(hDlg, IDC_COLOR) = Cardinal(lParam) then begin WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); if Brush <> 0 then DeleteObject(Brush); Brush := CreateSolidBrush(WidgetForm.BackColor); Windows.SetBkColor(wParam, WidgetForm.BackColor); Windows.SetTextColor(wParam, $FFFFFF - WidgetForm.BackColor); Result := Brush; SetWindowLong(hDlg, DWL_MSGRESULT, Integer(True)); end; end; { OnHorzScroll } function OnHorzScroll(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var iPos: Integer; WidgetForm: TWidgetMainForm; begin Result := LRESULT(True); if GetDlgItem(hDlg, IDC_TRANSPARENCY) = Cardinal(lParam) then begin iPos := SendDlgItemMessage(hDlg, IDC_TRANSPARENCY, TBM_GETPOS, 0, 0); if iPos in [$00..$FF] then begin WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); WidgetForm.Opacity := $FF - iPos + 20; WidgetForm.UpdateForm; end; end; end; { OnVertScroll } function OnVertScroll(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; var iPos: Integer; WidgetForm: TWidgetMainForm; begin Result := LRESULT(True); if GetDlgItem(hDlg, IDC_TRANSPARENCY) = Cardinal(lParam) then begin iPos := SendDlgItemMessage(hDlg, IDC_TRANSPARENCY, TBM_GETPOS, 0, 0); if iPos in [$00..$FF] then begin WidgetForm := TWidgetMainForm(GetPropW(hDlg, MakeIntAtomW(DialogAtom))); WidgetForm.Opacity := $FF - iPos + 20; WidgetForm.UpdateForm; end; end; end; { OnCancelMode } function OnCancelMode(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); end; { SettingsDlgProc } function SettingsDlgProc(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; stdcall; begin Result := LRESULT(False); case uMsg of WM_INITDIALOG : Result := OnInit(hDlg, uMsg, wParam, lParam); WM_DESTROY : Result := OnDestroy(hDlg, uMsg, wParam, lParam); WM_NOTIFY : Result := OnNotify(hDlg, uMsg, wParam, lParam); WM_COMMAND : Result := OnCommand(hDlg, uMsg, wParam, lParam); WM_CTLCOLORSTATIC : Result := OnCtlColorStatic(hDlg, uMsg, wParam, lParam); WM_HSCROLL : Result := OnHorzScroll(hDlg, uMsg, wParam, lParam); WM_VSCROLL : Result := OnVertScroll(hDlg, uMsg, wParam, lParam); WM_CANCELMODE : Result := OnCancelMode(hDlg, uMsg, wParam, lParam); WM_CHANGELANG : Result := OnChangeLang(hDlg, uMsg, wParam, lParam); end; end; { InitDialogAtom } procedure InitDialogAtom; begin DialogAtom := GlobalAddAtom('Dialog.WindowAtom.3.1'); end; { DoneDialogtAtom } procedure DoneDialogAtom; begin GlobalDeleteAtom(DialogAtom); end; initialization InitDialogAtom; finalization DoneDialogAtom; end.