Autor |
Beitrag |
Xearox
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Sa 07.08.10 21:15
Hai Leute
Ich bin auch mal wieder da
Passt auf, hab mir da mal einen Wecker fürn PC geschrieben, der läuft auch Super, hab keine Probleme mit dem, Klar werdet ihr nun sagen, das würde ich aber anders machen mit TimePicker usw. aber ich arbeite erstmal so...
Nun wollte ich das Programm ins Tray ablegen, jedoch klappt das nicht so ganz, wie ich das möchte, desweiteren wird das Tray nach Doppelklick auf diesem, nicht mehr nachdem Minimieren angezeigt.
Ein Icon hab ich erstellt und dieses wird auch im Tray angezeigt.
Jedoch wird nach minimieren das Programm immer noch in der Taskbar angezeigt und des möcht ich ganz gerne vermeiden.
Ich arbeite mit TTrayIcon aus Delphi 2010...
Den Code hab ich aus der Hilfe/Code-Beispiele und habe den Code auch in Soweit verstanden...
Hier nun der Code, vielleicht könntet ihr mir da weiter helfen, wie ich das schaffen kann.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242:
| unit Main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, MPlayer;
type TForm1 = class(TForm) TimerUhr: TTimer; BT_On: TButton; Bt_Off: TButton; Label_H: TLabel; Label_M: TLabel; L_Clock: TLabel; Bt_H_Plus: TButton; Bt_H_Minus: TButton; Bt_M_Plus: TButton; Bt_M_Minus: TButton; Label3: TLabel; Label4: TLabel; Button1: TButton; P_Status: TPanel; Debug_Wecker: TLabel; MediaPlayer1: TMediaPlayer; TrayIcon1: TTrayIcon; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TimerUhrTimer(Sender: TObject); procedure BT_OnClick(Sender: TObject); procedure Bt_OffClick(Sender: TObject); procedure Bt_H_MinusClick(Sender: TObject); procedure Bt_H_PlusClick(Sender: TObject); procedure Bt_M_MinusClick(Sender: TObject); procedure Bt_M_PlusClick(Sender: TObject); procedure WeckerStellen; procedure MediaPlayer1Notify(Sender: TObject); procedure FormDeactivate(Sender: TObject); procedure FormActivate(Sender: TObject); procedure ApplicationEvents1Minimize(Sender: TObject); procedure TrayIcon1DblClick(Sender: TObject); Private
public end;
var Form1: TForm1; Stunden, Minuten, WeckerAktiv: integer; WeckerZeit, StundenStr, MinutenStr: String; Aktiv: Boolean;
implementation
{$R *.dfm}
procedure TForm1.WeckerStellen; begin if (Stunden <= 9) then StundenStr := '0' + IntToStr(Stunden) else StundenStr := IntToStr(Stunden);
if (Minuten <= 9) then MinutenStr := '0' + IntToStr(Minuten) else MinutenStr := IntToStr(Minuten); WeckerZeit := StundenStr + ':' + MinutenStr + ':' + '00';
if (TimeToStr(Now) = WeckerZeit) then begin if (WeckerAktiv = 0) then begin MediaPlayer1.Close; MediaPlayer1.Filename := (ExtractFilePath(ParamStr(0)) + 'wecker.wav'); MediaPlayer1.Open; MediaPlayer1.Notify := True; MediaPlayer1.Play; WeckerAktiv := WeckerAktiv + 1; end; end;
end;
procedure TForm1.Bt_H_MinusClick(Sender: TObject); begin if Stunden = 0 then Stunden := 23 else Stunden := Stunden - 1; Label_H.Caption := IntToStr(Stunden); end;
procedure TForm1.Bt_H_PlusClick(Sender: TObject); begin if Stunden = 23 then Stunden := 0 else Stunden := Stunden + 1; Label_H.Caption := IntToStr(Stunden); end;
procedure TForm1.Bt_M_MinusClick(Sender: TObject); begin if Minuten = 0 then Minuten := 59 else Minuten := Minuten - 1; Label_M.Caption := IntToStr(Minuten); end;
procedure TForm1.Bt_M_PlusClick(Sender: TObject); begin if Minuten = 59 then Minuten := 0 else Minuten := Minuten + 1; Label_M.Caption := IntToStr(Minuten); end;
procedure TForm1.Bt_OffClick(Sender: TObject); begin P_Status.Color := clRed; P_Status.Caption := 'Ausgeschaltet'; Aktiv := false; MediaPlayer1.Open; MediaPlayer1.Stop; MediaPlayer1.Close; end;
procedure TForm1.BT_OnClick(Sender: TObject); begin P_Status.Color := clLime; P_Status.Caption := 'Eingeschaltet'; Debug_Wecker.Caption := WeckerZeit; Aktiv := True; end;
procedure TForm1.Button1Click(Sender: TObject); begin Close; end;
procedure TForm1.FormActivate(Sender: TObject); begin TrayIcon1.Visible := True; end;
procedure TForm1.FormCreate(Sender: TObject); var MyIcon: TIcon;
begin Stunden := 0; Minuten := 0; WeckerAktiv := 0; L_Clock.Caption := TimeToStr(Now); TrayIcon1.Icons := TImageList.Create(Self); MyIcon := TIcon.Create; MyIcon.LoadFromFile('icons/wecker.ico'); TrayIcon1.Icon.Assign(MyIcon); TrayIcon1.Icons.AddIcon(MyIcon);
MyIcon.LoadFromFile('icons/wecker.ico'); TrayIcon1.Icons.AddIcon(MyIcon); MyIcon.LoadFromFile('icons/wecker.ico'); TrayIcon1.Icons.AddIcon(MyIcon); MyIcon.LoadFromFile('icons/wecker.ico'); TrayIcon1.Icons.AddIcon(MyIcon);
TrayIcon1.Hint := 'Wecker'; TrayIcon1.AnimateInterval := 200;
TrayIcon1.BalloonTitle := 'Restoring the window.'; TrayIcon1.BalloonHint := 'Double click the system tray icon to restore the window.'; TrayIcon1.BalloonFlags := bfInfo; end;
procedure TForm1.FormDeactivate(Sender: TObject); begin TrayIcon1.Visible := false; end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject); begin if MediaPlayer1.Notify = True then begin MediaPlayer1.Play; end else begin MediaPlayer1.Stop; end; end;
procedure TForm1.TimerUhrTimer(Sender: TObject); begin L_Clock.Caption := TimeToStr(Now); if (Aktiv = True) then WeckerStellen;
end;
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject); begin Hide(); WindowState := wsMinimized; Form1.Visible:=true; TrayIcon1.Visible := True; TrayIcon1.Animate := True; TrayIcon1.ShowBalloonHint; end;
procedure TForm1.TrayIcon1DblClick(Sender: TObject); begin TrayIcon1.Visible := false; Show(); WindowState := wsNormal; Application.BringToFront(); end;
end. |
Und wenn ihr sagt, das wie ich den Wecker so aufgebaut hab, anders machen sollte, dann würde ich noch einen Extra Thread erstellen, wo ihr mir Tipps geben könntet.
Aber so klappt der Wecker ganz gut, ohne Probs. Bis auf, das nachdem Ausschalten des Weckers, die Meldung kommt "Kein MDI-Gerät geöffnet" Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 08.08.2010 um 22:44
|
|
chickenfigt1989
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: Sa 07.08.10 21:18
wieso nimmst du nicht die TJVTrayicon da komm sogar ich klar damit und das hat was zu heißen.
lg
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.08.10 21:25
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Sa 07.08.10 21:43
also im Klartext, bei einer If then Abfrage, wird immer nur Abgefragt, ob die Boolische Wert wahr ist, richtig?
Und was ist, wenn man abfragen will, ob er False ist?
Muss man dann if Aktiv = False then ...? oder reicht das auch nur if Aktiv then ?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.08.10 21:45
Das steht auch in den Links. Dann wäre es: Delphi-Quelltext
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Sa 07.08.10 21:52
ahh okay...dann weiß ich bescheid, ist auch dann weniger zu schreiben...
So hab hier mal jetzt mein Code Überarbeitet...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button2Click(Sender: TObject); begin ShowWindow(Self.Handle, SW_HIDE); Hide(); WindowState := wsMinimized; TrayIcon1.Visible := True; TrayIcon1.Animate := True; TrayIcon1.ShowBalloonHint; end; |
jedoch musst ich ein Eigenen Button machen, weil durch das klicken auf das Fenster Eigene Minimieren, passiert nichts...
Das Prob ist, System Basierende oder gar Hardeware Basierende Programmieren, habe ich mich noch nie mit auseinander gesetzt...
Also kenne daher keine Befehle, wie man zum Beispiel, ein Laufwerk checken kann, oder das Abfangen vom Fenster minimieren erreichen kann...
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 08.08.10 10:44
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: So 08.08.10 10:51
nein Leider nicht, habs ausprobiert, kommt immer noch die selbe Mitteilung...
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 08.08.10 10:55
Moment, gleich ne Frage hinterher.
jo ist klar. vermute mal das die Meldung kommt, wenn Du den Wecker ausstellst, und er noch nicht geklingelt hat. Richtig?
Ansonsten frage vorher ab
Delphi-Quelltext 1: 2: 3: 4: 5:
| if MediaPlayer1.Notify then begin Mediaplayer1.Stop; Mediaplayer1.Close; end |
Anmerkung: Wobei dies ja eigentlich nichts mit Dein Topic zu tun hat
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: So 08.08.10 12:28
das ist leider auch, während er am klingeln ist
ich probiers mal mit dem Code von dir...ma schauen
also hab nun folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Bt_OffClick(Sender: TObject); begin P_Status.Color := clRed; P_Status.Caption := 'Ausgeschaltet'; Aktiv := false; if MediaPlayer1.Notify then begin Mediaplayer1.Stop; Mediaplayer1.Close; end end; |
aber es wird immer noch angezeigt, das "Kein MCI-Gerät geöffnet" ist...ich weiß mir echt keinen Rat mehr.
[edit] Also musik wird zwar ausgeschaltet, aber halt nicht ohne diese Fehler meldung...
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 08.08.10 12:50
Ok, dann so. nimm das Close da raus.
Du erstellst eh beim Weckerstellen den Player neu!Was Du nicht machen müsstest!
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Xearox 
      
Beiträge: 260
Erhaltene Danke: 3
|
Verfasst: Di 10.08.10 15:06
Jop, lag am close, nun geht es, nach dem es draußen ist...
|
|
|