unit AddWidgetDlg; interface uses Windows, Messages, SysUtils, Classes, CommCtrl, ComObj, ActiveX, Widgets, GdipApi, WinInet, InetThrd, GdipObj, Contnrs, WIniFiles, MMSystem, InetUtil, WStrings, ShellApi, ShlObj; { AddWidgetDlgProc } function AddWidgetDlgProc(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; stdcall; implementation uses WidgetMain, Variants, DialogRes; const IDS_CAPTION = 4000; IDS_GROUPBOX = 4001; IDS_TRACKER_ID = 4004; IDS_TRACKER_TITLE = 4005; IDE_TRACKER_ID = 1002; IDE_TRACKER_TITLE = 1003; { 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_TRACKER_ID), PWideChar(WLang[IDS_TRACKER_ID])); SetWindowTextW(GetDlgItem(hDlg, IDS_TRACKER_TITLE), PWideChar(WLang[IDS_TRACKER_TITLE])); 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; begin Result := LRESULT(True); CenterDesktop(hDlg); WidgetManager.DialogHandle := hDlg; OnChangeLang(hDlg, uMsg, wParam, lParam); end; { OnDestroy } function OnDestroy(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); WidgetManager.DialogHandle := 0; 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 Title, AmungusID: WideString; Widget: TWidgetMainForm; begin Result := LRESULT(True); AmungusID := GetText(GetDlgItem(hDlg, IDE_TRACKER_ID)); Title := GetText(GetDlgItem(hDlg, IDE_TRACKER_TITLE)); { if Length(Title) = 0 then begin MessageBoxW(hDlg, 'Title cannot be empty.', 'Error', MB_ICONHAND); SetFocus(GetDlgItem(hDlg, IDE_TRACKER_TITLE)); Exit; end; } if Length(AmungusID) = 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; Widget := WidgetManager.GetByAmungusId(AmungusID); if Widget <> nil then begin MessageBoxW(hDlg, PWideChar(WLang[IDS_TEXT_1010]), PWideChar(WLang[IDS_TEXT_1004]), MB_ICONHAND); SetFocus(GetDlgItem(hDlg, IDE_TRACKER_ID)); Exit; end; WidgetManager.AddAmungus(AmungusID, Title, 250); EndDialog(hDlg, IDOK); end; { OnCancel } function OnCancel(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); 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; { OnCtlColorStatic } function OnCtlColorStatic(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(False); end; { OnCancelMode } function OnCancelMode(hDlg: HWND; uMsg: UINT; wParam: LongInt; lParam: LongInt): LRESULT; begin Result := LRESULT(True); end; { AddWidgetDlgProc } function AddWidgetDlgProc(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_CANCELMODE : Result := OnCancelMode(hDlg, uMsg, wParam, lParam); WM_CHANGELANG : Result := OnChangeLang(hDlg, uMsg, wParam, lParam); end; end; end.