1 | unit UDesktop;
|
---|
2 |
|
---|
3 | interface
|
---|
4 |
|
---|
5 | uses
|
---|
6 | Xvcl.Graphics, Xvcl.Controls, Xvcl.Classes, Xvcl.Forms, LDOS.Kernel,
|
---|
7 | Xvcl.Generics, SysUtils;
|
---|
8 |
|
---|
9 | type
|
---|
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 |
|
---|
30 | implementation
|
---|
31 |
|
---|
32 | uses
|
---|
33 | TestApplication;
|
---|
34 |
|
---|
35 | { TDesktopApp }
|
---|
36 |
|
---|
37 | procedure TDesktopApp.ButtonClick(Sender: TObject);
|
---|
38 | begin
|
---|
39 | TestApp := TTestApplication.Create;
|
---|
40 | TestApp.Screen := Screen;
|
---|
41 | TScreen(Screen).Kernel.RunApplication(TestApp);
|
---|
42 | end;
|
---|
43 |
|
---|
44 | procedure TDesktopApp.TaskButtonClick(Sender: TObject);
|
---|
45 | var
|
---|
46 | Process: TProcess;
|
---|
47 | begin
|
---|
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;
|
---|
53 | end;
|
---|
54 |
|
---|
55 | constructor TDesktopApp.Create;
|
---|
56 | begin
|
---|
57 | inherited;
|
---|
58 | TaskButtons := TObjectList<TButton>.Create;
|
---|
59 | end;
|
---|
60 |
|
---|
61 | destructor TDesktopApp.Destroy;
|
---|
62 | begin
|
---|
63 | TaskButtons.Destroy;
|
---|
64 | inherited;
|
---|
65 | end;
|
---|
66 |
|
---|
67 | function TDesktopApp.HandleMessage(Message: TMessage): Boolean;
|
---|
68 | begin
|
---|
69 | if (Message is TMessageResize) or (Message is TMessageTaskList) then begin
|
---|
70 | UpdateTaskBar;
|
---|
71 | Result := True;
|
---|
72 | end else Result := False;
|
---|
73 | end;
|
---|
74 |
|
---|
75 | procedure TDesktopApp.Run;
|
---|
76 | begin
|
---|
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;
|
---|
104 | end;
|
---|
105 |
|
---|
106 | procedure TDesktopApp.UpdateTaskBar;
|
---|
107 | begin
|
---|
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;
|
---|
114 | end;
|
---|
115 |
|
---|
116 | procedure TDesktopApp.UpdateTaskList;
|
---|
117 | var
|
---|
118 | I: Integer;
|
---|
119 | Width: Integer;
|
---|
120 | const
|
---|
121 | MaxWidth = 70;
|
---|
122 | begin
|
---|
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;
|
---|
145 | end;
|
---|
146 |
|
---|
147 | end.
|
---|