Rev 57 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
50 | daniel-mar | 1 | unit Main; |
2 | |||
51 | daniel-mar | 3 | (* |
4 | |||
64 | daniel-mar | 5 | # download einer primer-tabelle? |
6 | |||
51 | daniel-mar | 7 | bug: wenn man einen eintrag ändert oder hinzufügt, werden alle "status" auf unknown zurückgesetzt |
8 | td: aktualisierenbutton/f5 erlauben |
||
52 | daniel-mar | 9 | del-button... |
10 | icon: gray(internetdown),red,green |
||
11 | reg-write fehler erkennen |
||
51 | daniel-mar | 12 | |
64 | daniel-mar | 13 | statustext einführen (format 2.0) |
14 | |||
15 | rote listeneinträge bei fehlern |
||
16 | |||
17 | f5 möglichkeit geben? |
||
18 | |||
19 | nur 1 instanz zulassen |
||
20 | |||
21 | spaltenindizes 0,1,2 in constanten packen |
||
22 | |||
52 | daniel-mar | 23 | Future |
24 | ------ |
||
25 | |||
57 | daniel-mar | 26 | - Rote Einträge bei Fehlern? (VCL Problem) |
27 | - XP Bubble verwenden? |
||
28 | - Toolbar / ApplicationEvents |
||
52 | daniel-mar | 29 | |
51 | daniel-mar | 30 | *) |
31 | |||
50 | daniel-mar | 32 | interface |
33 | |||
34 | uses |
||
35 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
||
57 | daniel-mar | 36 | Dialogs, ShellAPI, Menus, Registry, Grids, StdCtrls, ExtCtrls, ImgList; |
50 | daniel-mar | 37 | |
38 | const |
||
39 | WM_TASKABAREVENT = WM_USER+1; //Taskbar message |
||
40 | |||
41 | type |
||
42 | TMainForm = class(TForm) |
||
52 | daniel-mar | 43 | TrayPopupMenu: TPopupMenu; |
50 | daniel-mar | 44 | Anzeigen1: TMenuItem; |
45 | Beenden1: TMenuItem; |
||
52 | daniel-mar | 46 | MonitorGrid: TStringGrid; |
47 | MenuPopupMenu: TPopupMenu; |
||
50 | daniel-mar | 48 | Edit1: TMenuItem; |
49 | Open1: TMenuItem; |
||
50 | N1: TMenuItem; |
||
51 | Delete1: TMenuItem; |
||
52 | Ping1: TMenuItem; |
||
53 | InitTimer: TTimer; |
||
54 | LoopTimer: TTimer; |
||
55 | Checknow1: TMenuItem; |
||
52 | daniel-mar | 56 | MainMenu: TMainMenu; |
57 | MEntry: TMenuItem; |
||
58 | MHelp: TMenuItem; |
||
59 | MAbout: TMenuItem; |
||
60 | MFile: TMenuItem; |
||
61 | MClose: TMenuItem; |
||
62 | MCloseAndExit: TMenuItem; |
||
63 | MNewEntry: TMenuItem; |
||
64 | N4: TMenuItem; |
||
65 | MCheckAll: TMenuItem; |
||
66 | MConfig: TMenuItem; |
||
67 | MConnWarnOpt: TMenuItem; |
||
68 | MInitTimeOpt: TMenuItem; |
||
69 | MitWindowsstarten1: TMenuItem; |
||
70 | N2: TMenuItem; |
||
71 | MLoopTimeOpt: TMenuItem; |
||
72 | MSpecs: TMenuItem; |
||
73 | Open2: TMenuItem; |
||
74 | Ping2: TMenuItem; |
||
75 | Checknow2: TMenuItem; |
||
76 | N3: TMenuItem; |
||
77 | Edit2: TMenuItem; |
||
78 | Delete2: TMenuItem; |
||
79 | LastCheckPanel: TPanel; |
||
80 | MUpdate: TMenuItem; |
||
81 | UpdateTimer: TTimer; |
||
82 | N5: TMenuItem; |
||
83 | N6: TMenuItem; |
||
57 | daniel-mar | 84 | ImageList1: TImageList; |
50 | daniel-mar | 85 | procedure FormDestroy(Sender: TObject); |
86 | procedure FormCreate(Sender: TObject); |
||
87 | procedure Anzeigen1Click(Sender: TObject); |
||
88 | procedure Beenden1Click(Sender: TObject); |
||
89 | procedure FormShow(Sender: TObject); |
||
52 | daniel-mar | 90 | procedure MonitorGridDblClick(Sender: TObject); |
50 | daniel-mar | 91 | procedure Open1Click(Sender: TObject); |
52 | daniel-mar | 92 | procedure MonitorGridMouseDown(Sender: TObject; Button: TMouseButton; |
50 | daniel-mar | 93 | Shift: TShiftState; X, Y: Integer); |
94 | procedure Edit1Click(Sender: TObject); |
||
95 | procedure Delete1Click(Sender: TObject); |
||
96 | procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
||
97 | procedure InitTimerTimer(Sender: TObject); |
||
98 | procedure LoopTimerTimer(Sender: TObject); |
||
51 | daniel-mar | 99 | procedure Checknow1Click(Sender: TObject); |
52 | daniel-mar | 100 | procedure Ping1Click(Sender: TObject); |
101 | procedure MCheckAllClick(Sender: TObject); |
||
102 | procedure MAboutClick(Sender: TObject); |
||
103 | procedure MLoopTimeOptClick(Sender: TObject); |
||
104 | procedure MNewEntryClick(Sender: TObject); |
||
105 | procedure MConnWarnOptClick(Sender: TObject); |
||
106 | procedure MInitTimeOptClick(Sender: TObject); |
||
107 | procedure MCloseClick(Sender: TObject); |
||
108 | procedure MCloseAndExitClick(Sender: TObject); |
||
109 | procedure MitWindowsstarten1Click(Sender: TObject); |
||
110 | procedure MSpecsClick(Sender: TObject); |
||
111 | procedure Open2Click(Sender: TObject); |
||
112 | procedure Ping2Click(Sender: TObject); |
||
113 | procedure Checknow2Click(Sender: TObject); |
||
114 | procedure Edit2Click(Sender: TObject); |
||
115 | procedure Delete2Click(Sender: TObject); |
||
116 | procedure MUpdateClick(Sender: TObject); |
||
117 | procedure UpdateTimerTimer(Sender: TObject); |
||
50 | daniel-mar | 118 | private |
119 | RealClose: boolean; |
||
120 | WarnAtConnectivityFailure: boolean; |
||
64 | daniel-mar | 121 | StatCache: TStringList; |
50 | daniel-mar | 122 | procedure TaskbarEvent(var Msg: TMessage); |
123 | Message WM_TASKABAREVENT; |
||
124 | procedure OnQueryEndSession(var Msg: TWMQueryEndSession); |
||
125 | message WM_QUERYENDSESSION; |
||
52 | daniel-mar | 126 | procedure OnWmQuit(var Msg: TWMQuit); |
127 | message WM_QUIT; |
||
50 | daniel-mar | 128 | procedure NotifyIconChange(dwMessage: Cardinal); |
129 | procedure LoadConfig; |
||
51 | daniel-mar | 130 | procedure ProcessStatMon(i: integer; ShowSuccess: boolean); |
131 | procedure ProcessAll(ShowSuccess: boolean); |
||
52 | daniel-mar | 132 | function GetCurrentMonitorName: string; |
133 | function GetCurrentMonitorURL: string; |
||
50 | daniel-mar | 134 | procedure Vordergrund; |
135 | procedure LoadList; |
||
57 | daniel-mar | 136 | function Status: boolean; |
52 | daniel-mar | 137 | // procedure RightAlignHelpMenuItem; |
50 | daniel-mar | 138 | end; |
139 | |||
140 | var |
||
141 | MainForm: TMainForm; |
||
142 | |||
143 | implementation |
||
144 | |||
51 | daniel-mar | 145 | {$R StatusMonManifest.res} |
146 | |||
50 | daniel-mar | 147 | {$R *.dfm} |
148 | |||
149 | uses |
||
52 | daniel-mar | 150 | Functions, ServiceEdit, StatusMonFuncs, About, Common; |
50 | daniel-mar | 151 | |
52 | daniel-mar | 152 | type |
153 | TExtended = packed record |
||
154 | Val: Extended; |
||
155 | Err: boolean; |
||
156 | end; |
||
157 | |||
158 | function StrToExtended(str: String): TExtended; |
||
159 | begin |
||
160 | result.Err := false; |
||
161 | result.Val := 0; |
||
162 | try |
||
163 | result.Val := StrToFloat(str); |
||
164 | except |
||
165 | result.Err := true; |
||
166 | end; |
||
167 | end; |
||
168 | |||
50 | daniel-mar | 169 | // Ref: http://www.delphi-fundgrube.de/faq01.htm |
170 | |||
171 | procedure TMainForm.TaskbarEvent(var Msg: TMessage); |
||
172 | var |
||
173 | Point: TPoint; |
||
174 | begin |
||
175 | { Die WM_TaskbarEvent-Message "Msg" gibt in Msg.LParam |
||
176 | das genaue Ereignis an. Msg.LParam kann folgende Werte für |
||
177 | Mausereignisse annehmen: |
||
178 | |||
179 | WM_MouseMove |
||
180 | WM_LButtonDown |
||
181 | WM_LButtonUp |
||
182 | WM_LButtonDblClk |
||
183 | WM_RButtonDown |
||
184 | WM_RButtonUp |
||
185 | WM_RButtonDblClk } |
||
186 | |||
187 | case Msg.LParam of |
||
188 | WM_LButtonDblClk: |
||
189 | begin |
||
190 | Vordergrund; |
||
191 | end; |
||
192 | WM_RButtonUp: |
||
193 | begin |
||
194 | // Rechtsklick |
||
195 | // Diese Zeile ist wichtig, damit das PopupMenu korrekt |
||
196 | // wieder geschlossen wird: |
||
197 | SetForegroundWindow(Handle); |
||
198 | GetCursorPos(Point); |
||
52 | daniel-mar | 199 | TrayPopupMenu.Popup(Point.x, Point.y); |
50 | daniel-mar | 200 | end; |
201 | end; |
||
202 | end; |
||
203 | |||
52 | daniel-mar | 204 | procedure TMainForm.UpdateTimerTimer(Sender: TObject); |
50 | daniel-mar | 205 | begin |
52 | daniel-mar | 206 | UpdateTimer.Interval := 6*60*60*1000; // Alle 6 Stunden gucken wir mal |
207 | VTSUpdateCheck('statusmon', '3.0', false, false); |
||
208 | end; |
||
209 | |||
210 | procedure TMainForm.MUpdateClick(Sender: TObject); |
||
211 | begin |
||
212 | VTSUpdateCheck('statusmon', '3.0', true, true); |
||
213 | end; |
||
214 | |||
215 | procedure TMainForm.MNewEntryClick(Sender: TObject); |
||
216 | begin |
||
50 | daniel-mar | 217 | if EditForm.ShowDialog('') then LoadList; |
218 | end; |
||
219 | |||
52 | daniel-mar | 220 | procedure TMainForm.MSpecsClick(Sender: TObject); |
221 | begin |
||
222 | // ToDo |
||
223 | end; |
||
224 | |||
50 | daniel-mar | 225 | procedure TMainForm.NotifyIconChange(dwMessage: Cardinal); |
226 | var |
||
227 | NotifyIconData: TNotifyIconData; |
||
57 | daniel-mar | 228 | ico: TIcon; |
50 | daniel-mar | 229 | begin |
230 | Fillchar(NotifyIconData,Sizeof(NotifyIconData), 0); |
||
231 | NotifyIconData.cbSize := Sizeof(NotifyIconData); |
||
232 | NotifyIconData.Wnd := Handle; |
||
233 | NotifyIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; |
||
234 | NotifyIconData.uCallbackMessage := WM_TASKABAREVENT; |
||
57 | daniel-mar | 235 | |
236 | ico := TIcon.Create; |
||
237 | if Status then |
||
238 | ImageList1.GetIcon(0, ico) |
||
239 | else |
||
240 | ImageList1.GetIcon(1, ico); |
||
241 | NotifyIconData.hIcon := ico.Handle; |
||
242 | |||
50 | daniel-mar | 243 | NotifyIconData.szTip := 'ViaThinkSoft Status Monitor 3.0'; |
244 | Shell_NotifyIcon(dwMessage, @NotifyIconData); |
||
245 | end; |
||
246 | |||
247 | procedure TMainForm.FormDestroy(Sender: TObject); |
||
248 | begin |
||
64 | daniel-mar | 249 | StatCache.Free; |
50 | daniel-mar | 250 | NotifyIconChange(NIM_DELETE); |
251 | end; |
||
252 | |||
253 | procedure TMainForm.FormCreate(Sender: TObject); |
||
254 | begin |
||
52 | daniel-mar | 255 | LastCheckPanel.Caption := Format(LNG_LAST_CHECK, [LNG_LAST_CHECK_UNKNOWN]); |
256 | |||
257 | // RightAlignHelpMenuItem; |
||
258 | |||
64 | daniel-mar | 259 | StatCache := TStringList.Create; |
260 | |||
261 | // Kommt sicherlich nicht in irgendeiner URL vor! |
||
262 | // #0 funktioniert nicht |
||
263 | StatCache.NameValueSeparator := #1; |
||
264 | |||
50 | daniel-mar | 265 | NotifyIconChange(NIM_ADD); |
266 | |||
52 | daniel-mar | 267 | MonitorGrid.Rows[0].Add(LNG_COLUMN_NAME); |
268 | MonitorGrid.Rows[0].Add(LNG_COLUMN_URL); |
||
269 | MonitorGrid.Rows[0].Add(LNG_COLUMN_STATUS); |
||
50 | daniel-mar | 270 | |
52 | daniel-mar | 271 | // Default-Werte |
272 | WarnAtConnectivityFailure := false; |
||
273 | LoopTimer.Interval := 1*60*60*1000; |
||
274 | InitTimer.Interval := 5*60*1000; |
||
275 | UpdateTimer.Interval := 5*60*1000; |
||
276 | |||
50 | daniel-mar | 277 | LoadConfig; |
278 | end; |
||
279 | |||
280 | procedure TMainForm.Vordergrund; |
||
281 | begin |
||
282 | Show; |
||
283 | ShowWindow(Handle, SW_RESTORE); |
||
284 | ForceForegroundWindow(Handle); |
||
285 | end; |
||
286 | |||
52 | daniel-mar | 287 | procedure TMainForm.MLoopTimeOptClick(Sender: TObject); |
288 | var |
||
289 | reg: TRegistry; |
||
290 | x: string; |
||
291 | e: TExtended; |
||
292 | begin |
||
293 | reg := TRegistry.Create; |
||
294 | try |
||
295 | reg.RootKey := HKEY_CURRENT_USER; |
||
296 | if reg.OpenKey(REG_KEY_SETTINGS, true) then |
||
297 | begin |
||
298 | x := InputBox(LNG_LOOP_TIME, LNG_INPUT_MINUTE_INTERVAL, IntToStr(round(LoopTimer.Interval/60/1000))); |
||
299 | e := StrToExtended(x); |
||
300 | if not e.Err and (e.Val > 0) then |
||
301 | begin |
||
302 | LoopTimer.Interval := Round(e.Val*60*1000); |
||
303 | reg.WriteInteger(REG_VAL_LOOP_TIMER_INTERVAL, LoopTimer.Interval); |
||
304 | MLoopTimeOpt.Caption := Format(LNG_LOOP_TIME_OPTION, [round(e.Val)]); |
||
305 | end |
||
306 | else |
||
307 | begin |
||
308 | MessageBox(Handle, PChar(LNG_ERROR), PChar(LNG_NO_POSITIVE_NUMBER_WITHOUT_ZERO), MB_ICONERROR or MB_OK); |
||
309 | end; |
||
310 | end; |
||
311 | finally |
||
312 | reg.Free; |
||
313 | end; |
||
314 | end; |
||
315 | |||
316 | procedure TMainForm.MCheckAllClick(Sender: TObject); |
||
317 | begin |
||
318 | ProcessAll(false); |
||
319 | MessageBox(Handle, PChar(LNG_CHECKALL_FINISHED_TEXT), PChar(LNG_CHECKALL_FINISHED_CAPTION), MB_ICONINFORMATION or MB_OK); |
||
320 | end; |
||
321 | |||
50 | daniel-mar | 322 | procedure TMainForm.Anzeigen1Click(Sender: TObject); |
323 | begin |
||
324 | Vordergrund; |
||
325 | end; |
||
326 | |||
327 | procedure TMainForm.Beenden1Click(Sender: TObject); |
||
328 | begin |
||
52 | daniel-mar | 329 | MCloseAndExit.Click; |
50 | daniel-mar | 330 | end; |
331 | |||
52 | daniel-mar | 332 | procedure TMainForm.MAboutClick(Sender: TObject); |
333 | begin |
||
57 | daniel-mar | 334 | AboutForm.PopupParent := Screen.ActiveForm; // Workaround |
52 | daniel-mar | 335 | AboutForm.ShowModal; |
336 | end; |
||
337 | |||
50 | daniel-mar | 338 | procedure TMainForm.LoadConfig; |
339 | var |
||
340 | reg: TRegistry; |
||
341 | begin |
||
342 | reg := TRegistry.Create; |
||
343 | try |
||
344 | reg.RootKey := HKEY_CURRENT_USER; |
||
52 | daniel-mar | 345 | if reg.OpenKeyReadOnly(REG_KEY_SETTINGS) then |
50 | daniel-mar | 346 | begin |
52 | daniel-mar | 347 | if reg.ValueExists(REG_VAL_INIT_TIMER_INTERVAL) then |
348 | InitTimer.Interval := reg.ReadInteger(REG_VAL_INIT_TIMER_INTERVAL); |
||
51 | daniel-mar | 349 | |
52 | daniel-mar | 350 | if reg.ValueExists(REG_VAL_LOOP_TIMER_INTERVAL) then |
351 | LoopTimer.Interval := reg.ReadInteger(REG_VAL_LOOP_TIMER_INTERVAL); |
||
51 | daniel-mar | 352 | |
52 | daniel-mar | 353 | if reg.ValueExists(REG_VAL_WARN_AT_CONNFAILURE) then |
354 | WarnAtConnectivityFailure := reg.ReadBool(REG_VAL_WARN_AT_CONNFAILURE); |
||
51 | daniel-mar | 355 | |
50 | daniel-mar | 356 | reg.CloseKey; |
357 | end; |
||
358 | finally |
||
359 | reg.Free; |
||
360 | end; |
||
52 | daniel-mar | 361 | |
362 | MInitTimeOpt.Caption := Format(LNG_INIT_TIME_OPTION, [round(InitTimer.Interval/1000/60)]); |
||
363 | MLoopTimeOpt.Caption := Format(LNG_LOOP_TIME_OPTION, [round(LoopTimer.Interval/1000/60)]); |
||
364 | MConnWarnOpt.Checked := WarnAtConnectivityFailure; |
||
50 | daniel-mar | 365 | end; |
366 | |||
367 | procedure TMainForm.LoadList; |
||
368 | var |
||
369 | reg: TRegistry; |
||
370 | st: TStringList; |
||
371 | i: Integer; |
||
64 | daniel-mar | 372 | MonitorUrl, CachedStat: String; |
50 | daniel-mar | 373 | begin |
374 | reg := TRegistry.Create; |
||
375 | st := TStringList.Create; |
||
376 | try |
||
377 | reg.RootKey := HKEY_CURRENT_USER; |
||
52 | daniel-mar | 378 | if reg.OpenKeyReadOnly(REG_KEY_SERVICES) then |
50 | daniel-mar | 379 | begin |
380 | reg.GetKeyNames(st); |
||
52 | daniel-mar | 381 | MonitorGrid.RowCount := st.Count + 1; |
50 | daniel-mar | 382 | for i := 0 to st.Count - 1 do |
383 | begin |
||
52 | daniel-mar | 384 | if reg.OpenKeyReadOnly(Format(REG_KEY_SERVICE, [st.Strings[i]])) then |
50 | daniel-mar | 385 | begin |
52 | daniel-mar | 386 | MonitorGrid.Rows[i+1].Clear; |
387 | MonitorGrid.Rows[i+1].Add(st.Strings[i]); |
||
64 | daniel-mar | 388 | MonitorUrl := reg.ReadString(REG_VAL_URL); |
389 | MonitorGrid.Rows[i+1].Add(MonitorUrl); |
||
390 | CachedStat := StatCache.Values[MonitorUrl]; |
||
391 | If CachedStat = '' then CachedStat := LNG_STAT_UNKNOWN; |
||
392 | MonitorGrid.Rows[i+1].Add(CachedStat); |
||
50 | daniel-mar | 393 | end; |
394 | end; |
||
395 | reg.CloseKey; |
||
396 | end; |
||
397 | finally |
||
398 | st.Free; |
||
399 | reg.Free; |
||
400 | end; |
||
401 | end; |
||
402 | |||
403 | procedure TMainForm.LoopTimerTimer(Sender: TObject); |
||
404 | begin |
||
51 | daniel-mar | 405 | ProcessAll(false); |
50 | daniel-mar | 406 | end; |
407 | |||
52 | daniel-mar | 408 | procedure TMainForm.MitWindowsstarten1Click(Sender: TObject); |
409 | begin |
||
410 | ShowMessage('ToDo'); // ToDo |
||
411 | end; |
||
412 | |||
50 | daniel-mar | 413 | procedure TMainForm.FormShow(Sender: TObject); |
414 | begin |
||
415 | LoadList; |
||
416 | end; |
||
417 | |||
52 | daniel-mar | 418 | procedure TMainForm.MInitTimeOptClick(Sender: TObject); |
419 | var |
||
420 | reg: TRegistry; |
||
421 | x: string; |
||
422 | e: TExtended; |
||
423 | begin |
||
424 | reg := TRegistry.Create; |
||
425 | try |
||
426 | reg.RootKey := HKEY_CURRENT_USER; |
||
427 | if reg.OpenKey(REG_KEY_SETTINGS, true) then |
||
428 | begin |
||
429 | x := InputBox(LNG_INIT_TIME, LNG_INPUT_MINUTE_INTERVAL, IntToStr(round(InitTimer.Interval/60/1000))); |
||
430 | e := StrToExtended(x); |
||
431 | if not e.Err and (e.Val > 0) then |
||
432 | begin |
||
433 | InitTimer.Interval := Round(e.Val*60*1000); |
||
434 | reg.WriteInteger(REG_VAL_INIT_TIMER_INTERVAL, InitTimer.Interval); |
||
435 | MInitTimeOpt.Caption := Format(LNG_INIT_TIME_OPTION, [round(e.Val)]); |
||
436 | end |
||
437 | else |
||
438 | begin |
||
439 | MessageBox(Handle, PChar(LNG_ERROR), PChar(LNG_NO_POSITIVE_NUMBER_WITHOUT_ZERO), MB_ICONERROR or MB_OK); |
||
440 | end; |
||
441 | end; |
||
442 | finally |
||
443 | reg.Free; |
||
444 | end; |
||
445 | end; |
||
446 | |||
50 | daniel-mar | 447 | procedure TMainForm.InitTimerTimer(Sender: TObject); |
448 | begin |
||
449 | InitTimer.Enabled := false; |
||
450 | LoopTimer.Enabled := true; |
||
451 | end; |
||
452 | |||
52 | daniel-mar | 453 | procedure TMainForm.MCloseClick(Sender: TObject); |
50 | daniel-mar | 454 | begin |
52 | daniel-mar | 455 | Close; |
456 | end; |
||
457 | |||
458 | procedure TMainForm.MCloseAndExitClick(Sender: TObject); |
||
459 | begin |
||
460 | if MessageBox(Handle, PChar(LNG_EXIT_TEXT), PChar(LNG_EXIT_CAPTION), MB_ICONQUESTION or MB_YESNOCANCEL) = IDYES then |
||
461 | begin |
||
462 | RealClose := true; |
||
463 | Close; |
||
464 | end; |
||
465 | end; |
||
466 | |||
467 | procedure TMainForm.MonitorGridDblClick(Sender: TObject); |
||
468 | begin |
||
50 | daniel-mar | 469 | Open1.Click; |
470 | end; |
||
471 | |||
52 | daniel-mar | 472 | function TMainForm.GetCurrentMonitorName: string; |
473 | begin |
||
474 | // result := MonitorGrid.Rows[MonitorGrid.Row].Strings[0]; |
||
475 | result := MonitorGrid.Cells[0, MonitorGrid.Row]; |
||
476 | end; |
||
477 | |||
478 | function TMainForm.GetCurrentMonitorURL: string; |
||
479 | begin |
||
480 | // result := MonitorGrid.Rows[MonitorGrid.Row].Strings[1]; |
||
481 | result := MonitorGrid.Cells[1, MonitorGrid.Row]; |
||
482 | end; |
||
483 | |||
50 | daniel-mar | 484 | procedure TMainForm.Open1Click(Sender: TObject); |
485 | begin |
||
52 | daniel-mar | 486 | Open2.Click; |
50 | daniel-mar | 487 | end; |
488 | |||
52 | daniel-mar | 489 | procedure TMainForm.Open2Click(Sender: TObject); |
490 | begin |
||
491 | ShellExecute(Handle, 'open', PChar(GetCurrentMonitorURL), '', '', SW_SHOW) |
||
492 | end; |
||
493 | |||
494 | procedure TMainForm.Ping1Click(Sender: TObject); |
||
495 | begin |
||
496 | Ping2.Click; |
||
497 | end; |
||
498 | |||
499 | procedure TMainForm.Ping2Click(Sender: TObject); |
||
500 | begin |
||
501 | ShellExecute(Handle, 'open', 'ping', PChar(GetDomainNameByURL(GetCurrentMonitorURL)+' -t'), '', SW_NORMAL); |
||
502 | end; |
||
503 | |||
51 | daniel-mar | 504 | procedure TMainForm.ProcessAll(ShowSuccess: boolean); |
50 | daniel-mar | 505 | var |
506 | i: integer; |
||
507 | begin |
||
52 | daniel-mar | 508 | for i := 1 to MonitorGrid.RowCount - 1 do |
50 | daniel-mar | 509 | begin |
52 | daniel-mar | 510 | MonitorGrid.Cells[2, i] := LNG_STAT_QUEUE; |
511 | end; |
||
512 | for i := 1 to MonitorGrid.RowCount - 1 do |
||
513 | begin |
||
51 | daniel-mar | 514 | ProcessStatMon(i, ShowSuccess); |
50 | daniel-mar | 515 | end; |
52 | daniel-mar | 516 | LastCheckPanel.Caption := Format(LNG_LAST_CHECK, [DateTimeToStr(Now)]); |
50 | daniel-mar | 517 | end; |
518 | |||
51 | daniel-mar | 519 | procedure TMainForm.ProcessStatMon(i: integer; ShowSuccess: boolean); |
50 | daniel-mar | 520 | var |
521 | x: TMonitorState; |
||
51 | daniel-mar | 522 | MonitorUrl, ServerName: string; |
50 | daniel-mar | 523 | begin |
52 | daniel-mar | 524 | ServerName := MonitorGrid.Rows[i].Strings[0]; |
525 | MonitorUrl := MonitorGrid.Rows[i].Strings[1]; |
||
51 | daniel-mar | 526 | |
64 | daniel-mar | 527 | if MonitorUrl = '' then Exit; // Passiert, wenn Create() aufgehalten wird (z.B. mit ShowMessage) |
528 | |||
52 | daniel-mar | 529 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_CHECKING; |
51 | daniel-mar | 530 | Application.ProcessMessages; |
531 | |||
50 | daniel-mar | 532 | x := DeterminateMonitorState(MonitorUrl); |
533 | |||
534 | if x = msOK then |
||
535 | begin |
||
52 | daniel-mar | 536 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_OK; |
64 | daniel-mar | 537 | StatCache.Values[MonitorUrl] := LNG_STAT_OK; |
57 | daniel-mar | 538 | NotifyIconChange(NIM_MODIFY); |
51 | daniel-mar | 539 | if ShowSuccess then |
540 | begin |
||
52 | daniel-mar | 541 | MessageBox(Handle, PChar(Format(LNG_ALERT_STATUS_OK, [ServerName, MonitorUrl])), PChar(LNG_CHECKALL_FINISHED_CAPTION), MB_ICONINFORMATION or MB_OK); |
51 | daniel-mar | 542 | end; |
50 | daniel-mar | 543 | end |
544 | else if x = msStatusWarning then |
||
545 | begin |
||
52 | daniel-mar | 546 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_WARNING; |
64 | daniel-mar | 547 | StatCache.Values[MonitorUrl] := LNG_STAT_WARNING; |
57 | daniel-mar | 548 | NotifyIconChange(NIM_MODIFY); |
52 | daniel-mar | 549 | if MessageBox(Handle, PChar(Format(LNG_ALERT_STATUS_WARNING, [ServerName, MonitorUrl])), PChar(LNG_ALERT_CAPTION), MB_ICONWARNING or MB_YESNOCANCEL) = IDYES then |
50 | daniel-mar | 550 | begin |
551 | ShellExecute(Handle, 'open', PChar(MonitorUrl), '', '', SW_NORMAL); |
||
552 | end; |
||
553 | end |
||
51 | daniel-mar | 554 | else if x = msMonitorParseError then |
50 | daniel-mar | 555 | begin |
52 | daniel-mar | 556 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_PARSEERROR; |
64 | daniel-mar | 557 | StatCache.Values[MonitorUrl] := LNG_STAT_PARSEERROR; |
57 | daniel-mar | 558 | NotifyIconChange(NIM_MODIFY); |
52 | daniel-mar | 559 | if MessageBox(Handle, PChar(Format(LNG_ALERT_MONITOR_FAILURE, [ServerName, MonitorUrl])), PChar(LNG_ALERT_CAPTION), MB_ICONWARNING or MB_YESNOCANCEL) = IDYES then |
50 | daniel-mar | 560 | begin |
561 | ShellExecute(Handle, 'open', PChar(MonitorUrl), '', '', SW_NORMAL); |
||
562 | end; |
||
563 | end |
||
51 | daniel-mar | 564 | else if x = msMonitorGeneralError then |
565 | begin |
||
52 | daniel-mar | 566 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_GENERALERROR; |
64 | daniel-mar | 567 | StatCache.Values[MonitorUrl] := LNG_STAT_GENERALERROR; |
57 | daniel-mar | 568 | NotifyIconChange(NIM_MODIFY); |
52 | daniel-mar | 569 | if MessageBox(Handle, PChar(Format(LNG_ALERT_MONITOR_FAILURE, [ServerName, MonitorUrl])), PChar(LNG_ALERT_CAPTION), MB_ICONWARNING or MB_YESNOCANCEL) = IDYES then |
51 | daniel-mar | 570 | begin |
571 | ShellExecute(Handle, 'open', PChar(MonitorUrl), '', '', SW_NORMAL); |
||
572 | end; |
||
573 | end |
||
50 | daniel-mar | 574 | else if x = msServerDown then |
575 | begin |
||
52 | daniel-mar | 576 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_SERVERDOWN; |
64 | daniel-mar | 577 | StatCache.Values[MonitorUrl] := LNG_STAT_SERVERDOWN; |
57 | daniel-mar | 578 | NotifyIconChange(NIM_MODIFY); |
50 | daniel-mar | 579 | // Es besteht eine Internetverbindung, daher ist wohl was mit dem |
580 | // Server nicht in Ordnung |
||
581 | |||
52 | daniel-mar | 582 | if MessageBox(Handle, PChar(Format(LNG_ALERT_SERVER_DOWN, [ServerName, MonitorUrl])), PChar(LNG_ALERT_CAPTION), MB_ICONWARNING or MB_YESNOCANCEL) = IDYES then |
50 | daniel-mar | 583 | begin |
52 | daniel-mar | 584 | Ping1.Click; |
50 | daniel-mar | 585 | end; |
586 | end |
||
587 | else if x = msInternetBroken then |
||
588 | begin |
||
52 | daniel-mar | 589 | MonitorGrid.Rows[i].Strings[2] := LNG_STAT_INTERNETBROKEN; |
64 | daniel-mar | 590 | StatCache.Values[MonitorUrl] := LNG_STAT_INTERNETBROKEN; |
57 | daniel-mar | 591 | NotifyIconChange(NIM_MODIFY); |
50 | daniel-mar | 592 | if not WarnAtConnectivityFailure then |
593 | begin |
||
52 | daniel-mar | 594 | if MessageBox(Handle, PChar(Format(LNG_ALERT_CONNECTIVITY_FAILURE, [ServerName, MonitorUrl])), PChar(LNG_ALERT_CAPTION), MB_ICONWARNING or MB_YESNOCANCEL) = IDYES then |
50 | daniel-mar | 595 | begin |
52 | daniel-mar | 596 | Ping1.Click; |
50 | daniel-mar | 597 | end; |
598 | end; |
||
599 | end; |
||
600 | end; |
||
601 | |||
57 | daniel-mar | 602 | function TMainForm.Status: boolean; |
603 | var |
||
604 | i: integer; |
||
605 | s: string; |
||
606 | begin |
||
607 | for i := 1 to MonitorGrid.RowCount - 1 do |
||
608 | begin |
||
609 | s := MonitorGrid.Cells[2, i]; |
||
610 | if (s <> LNG_STAT_OK) and (s <> LNG_STAT_UNKNOWN) and |
||
611 | (s <> LNG_STAT_QUEUE) and (s <> LNG_STAT_CHECKING) and |
||
612 | (s <> '') then |
||
613 | begin |
||
614 | result := false; |
||
615 | exit; |
||
616 | end; |
||
617 | end; |
||
618 | result := true; |
||
619 | end; |
||
620 | |||
52 | daniel-mar | 621 | // Ref: http://delphi.about.com/od/adptips2006/qt/rightalignmenu.htm |
622 | (* procedure TMainForm.RightAlignHelpMenuItem; |
||
623 | var |
||
624 | mii: TMenuItemInfo; |
||
625 | hMainMenu: hMenu; |
||
626 | Buffer: array[0..79] of Char; |
||
627 | begin |
||
628 | hMainMenu := Self.Menu.Handle; |
||
629 | |||
630 | //GET Help Menu Item Info |
||
631 | mii.cbSize := SizeOf(mii) ; |
||
632 | mii.fMask := MIIM_TYPE; |
||
633 | mii.dwTypeData := Buffer; |
||
634 | mii.cch := SizeOf(Buffer) ; |
||
635 | GetMenuItemInfo(hMainMenu, MHelp.Command, false, mii) ; |
||
636 | |||
637 | //SET Help Menu Item Info |
||
638 | mii.fType := mii.fType or MFT_RIGHTJUSTIFY; |
||
639 | SetMenuItemInfo(hMainMenu, MHelp.Command, false, mii) ; |
||
640 | end; *) |
||
641 | |||
642 | procedure TMainForm.MonitorGridMouseDown(Sender: TObject; |
||
50 | daniel-mar | 643 | Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
644 | var |
||
645 | col, row: integer; |
||
646 | begin |
||
647 | if Button = mbRight then |
||
648 | begin |
||
52 | daniel-mar | 649 | MonitorGrid.MouseToCell(X, Y, col, row); |
650 | if row >= MonitorGrid.FixedRows then |
||
651 | MonitorGrid.Row := row; |
||
50 | daniel-mar | 652 | |
52 | daniel-mar | 653 | if col >= MonitorGrid.FixedCols then |
654 | MonitorGrid.Col := col; |
||
50 | daniel-mar | 655 | |
52 | daniel-mar | 656 | if (row >= MonitorGrid.FixedRows) and |
657 | (col >= MonitorGrid.FixedCols) then |
||
50 | daniel-mar | 658 | begin |
52 | daniel-mar | 659 | MonitorGrid.PopupMenu := MenuPopupMenu; |
50 | daniel-mar | 660 | end |
661 | else |
||
662 | begin |
||
52 | daniel-mar | 663 | MonitorGrid.PopupMenu := nil; |
50 | daniel-mar | 664 | end; |
665 | end; |
||
666 | end; |
||
667 | |||
668 | procedure TMainForm.Edit1Click(Sender: TObject); |
||
669 | begin |
||
52 | daniel-mar | 670 | Edit2.Click; |
50 | daniel-mar | 671 | end; |
672 | |||
52 | daniel-mar | 673 | procedure TMainForm.Edit2Click(Sender: TObject); |
674 | begin |
||
675 | if EditForm.ShowDialog(GetCurrentMonitorName) then LoadList; |
||
676 | end; |
||
677 | |||
678 | procedure TMainForm.Delete2Click(Sender: TObject); |
||
50 | daniel-mar | 679 | var |
680 | reg: TRegistry; |
||
681 | begin |
||
52 | daniel-mar | 682 | if MessageBox(Handle, PChar(Format(LNG_DELETE_TEXT, [GetCurrentMonitorName])), PChar(LNG_DELETE_CAPTION), MB_ICONQUESTION or MB_YESNOCANCEL) = IDYES then |
50 | daniel-mar | 683 | begin |
684 | reg := TRegistry.Create; |
||
685 | try |
||
686 | reg.RootKey := HKEY_CURRENT_USER; |
||
52 | daniel-mar | 687 | if reg.DeleteKey(Format(REG_KEY_SERVICE, [GetCurrentMonitorName])) then LoadList; |
50 | daniel-mar | 688 | finally |
689 | reg.Free; |
||
690 | end; |
||
691 | end; |
||
692 | end; |
||
693 | |||
52 | daniel-mar | 694 | procedure TMainForm.Delete1Click(Sender: TObject); |
50 | daniel-mar | 695 | begin |
52 | daniel-mar | 696 | Delete2.Click; |
50 | daniel-mar | 697 | end; |
698 | |||
52 | daniel-mar | 699 | procedure TMainForm.Checknow1Click(Sender: TObject); |
50 | daniel-mar | 700 | begin |
52 | daniel-mar | 701 | Checknow2.Click; |
50 | daniel-mar | 702 | end; |
703 | |||
52 | daniel-mar | 704 | procedure TMainForm.Checknow2Click(Sender: TObject); |
51 | daniel-mar | 705 | begin |
52 | daniel-mar | 706 | ProcessStatMon(MonitorGrid.Row, true); |
51 | daniel-mar | 707 | end; |
708 | |||
52 | daniel-mar | 709 | procedure TMainForm.MConnWarnOptClick(Sender: TObject); |
710 | var |
||
711 | reg: TRegistry; |
||
712 | begin |
||
713 | reg := TRegistry.Create; |
||
714 | try |
||
715 | reg.RootKey := HKEY_CURRENT_USER; |
||
716 | if reg.OpenKey(REG_KEY_SETTINGS, true) then |
||
717 | begin |
||
718 | WarnAtConnectivityFailure := MConnWarnOpt.Checked; |
||
719 | reg.WriteBool(REG_VAL_WARN_AT_CONNFAILURE, WarnAtConnectivityFailure); |
||
720 | end; |
||
721 | finally |
||
722 | reg.Free; |
||
723 | end; |
||
724 | end; |
||
725 | |||
50 | daniel-mar | 726 | procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
727 | begin |
||
728 | Hide; |
||
729 | CanClose := RealClose; |
||
730 | end; |
||
731 | |||
57 | daniel-mar | 732 | procedure TMainForm.OnQueryEndSession(var Msg: TWMQueryEndSession); |
50 | daniel-mar | 733 | begin |
734 | RealClose := true; |
||
735 | Close; |
||
736 | Msg.Result := 1; |
||
737 | end; |
||
738 | |||
52 | daniel-mar | 739 | procedure TMainForm.OnWmQuit(var Msg: TWMQuit); |
740 | begin |
||
741 | RealClose := true; |
||
742 | Close; |
||
743 | Msg.Result := 1; |
||
744 | end; |
||
745 | |||
50 | daniel-mar | 746 | end. |