source: os/trunk/Applications/UDesktop.pas

Last change on this file was 14, checked in by chronos, 8 years ago
  • Modified: TForm title bar implemented using controls.
File size: 3.8 KB
Line 
1unit UDesktop;
2
3interface
4
5uses
6 Xvcl.Graphics, Xvcl.Controls, Xvcl.Classes, Xvcl.Forms, LDOS.Kernel,
7 Xvcl.Generics, SysUtils;
8
9type
10 TDesktopApp = class(TApplication)
11 private
12 procedure TaskButtonClick(Sender: TObject);
13 protected
14 public
15 MenuButton: TButton;
16 MainBar: TForm;
17 TaskBar: TPanel;
18 TestApp: TApplication;
19 TaskButtons: TObjectList<TButton>;
20 function HandleMessage(Message: TMessage): Boolean; override;
21 procedure Run; override;
22 constructor Create; override;
23 destructor Destroy; override;
24 procedure ButtonClick(Sender: TObject);
25 procedure UpdateTaskList;
26 procedure UpdateTaskBar;
27 end;
28
29
30implementation
31
32uses
33 TestApplication;
34
35{ TDesktopApp }
36
37procedure TDesktopApp.ButtonClick(Sender: TObject);
38begin
39 TestApp := TTestApplication.Create;
40 TestApp.Screen := Screen;
41 TScreen(Screen).Kernel.RunApplication(TestApp);
42end;
43
44procedure TDesktopApp.TaskButtonClick(Sender: TObject);
45var
46 Process: TProcess;
47begin
48 if Sender is TButton then begin
49 Process := TScreen(Screen).Kernel.Processes[TaskButtons.IndexOf(TButton(Sender))];
50 if Assigned(Process) and Assigned(Process.Application.MainForm) then
51 Process.Application.MainForm.Focused := True;
52 end;
53end;
54
55constructor TDesktopApp.Create;
56begin
57 inherited;
58 TaskButtons := TObjectList<TButton>.Create;
59end;
60
61destructor TDesktopApp.Destroy;
62begin
63 TaskButtons.Destroy;
64 inherited;
65end;
66
67function TDesktopApp.HandleMessage(Message: TMessage): Boolean;
68begin
69 if (Message is TMessageResize) or (Message is TMessageTaskList) then begin
70 UpdateTaskBar;
71 Result := True;
72 end else Result := False;
73end;
74
75procedure TDesktopApp.Run;
76begin
77 inherited;
78 Caption := 'Desktop';
79 MainBar := TForm.Create;
80 MainBar.Owner := Self;
81 MainBar.BorderStyle := bsNone;
82 MainBar.Name := 'MainBar';
83 MainBar.Caption := 'fdfdfd';
84 MainBar.Screen := Screen;
85 MainBar.Application := Self;
86 TaskBar := TPanel.Create;
87 TaskBar.Parent := MainBar;
88 TaskBar.Owner := MainBar;
89 TaskBar.Name := 'TaskBar';
90 TaskBar.Color := clLightGreen;
91 TaskBar.Visible := True;
92 TaskBar.Caption := 'dds';
93 MenuButton := TButton.Create;
94 MenuButton.Parent := MainBar;
95 MenuButton.Owner := MainBar;
96 MenuButton.Bounds := TRectangle.Create(0, 0, 50, 24);
97 MenuButton.Visible := True;
98 MenuButton.Caption := 'Menu';
99 MenuButton.OnClick := ButtonClick;
100 TScreen(Screen).Forms.Add(MainBar);
101 MainForm := MainBar;
102 UpdateTaskBar;
103 TScreen(Screen).Paint;
104end;
105
106procedure TDesktopApp.UpdateTaskBar;
107begin
108 MainBar.Bounds := TRectangle.Create(0, TScreen(Screen).Size.Y - 24,
109 TScreen(Screen).Size.X, 24);
110 TaskBar.Bounds := TRectangle.Create(0, 0,
111 MainBar.Bounds.Width, MainBar.Bounds.Height);
112 UpdateTaskList;
113 TScreen(Screen).Paint;
114end;
115
116procedure TDesktopApp.UpdateTaskList;
117var
118 I: Integer;
119 Width: Integer;
120const
121 MaxWidth = 70;
122begin
123 for I := 0 to TaskButtons.Count - 1 do begin
124 MainBar.Controls.Remove(TaskButtons[I]);
125 TaskButtons[I].Destroy;
126 end;
127
128 with TScreen(Screen).Kernel do begin
129 TaskButtons.Count := Processes.Count;
130 Width := (MainBar.Bounds.Width - MenuButton.Bounds.Width) div Processes.Count;
131 if Width > MaxWidth then Width := MaxWidth;
132
133 for I := 0 to Processes.Count - 1 do begin
134 TaskButtons[I] := TButton.Create;
135 TaskButtons[I].Name := 'Button';
136 TaskButtons[I].Caption := Processes[I].Name;
137 TaskButtons[I].Visible := True;
138 TaskButtons[I].Parent := MainBar;
139 TaskButtons[I].Bounds := TRectangle.Create(MenuButton.Bounds.Width +
140 I * Width, 0, Width, MainBar.Bounds.Height);
141 TaskButtons[I].OnClick := TaskButtonClick;
142 MainBar.Controls.Add(TaskButtons[I]);
143 end;
144 end;
145end;
146
147end.
Note: See TracBrowser for help on using the repository browser.