• R/O
  • SSH
  • HTTPS

onstepper: Commit


Commit MetaInfo

Revision9 (tree)
Time2023-09-19 10:16:16
Authorderekwildstar

Log Message

Como faz tempo que não mexo neste projeto, não posso dizer o que foi feito aqui, infelizmente, só posso dizer que o que tem aqui compilou sem problemas

Change Summary

Incremental Difference

--- trunk/prj/OnStepper.dpr (revision 8)
+++ trunk/prj/OnStepper.dpr (revision 9)
@@ -17,7 +17,10 @@
1717 UTipos in '..\src\UTipos.pas',
1818 UConfiguracoes in '..\src\UConfiguracoes.pas',
1919 UConstantes in '..\src\UConstantes.pas',
20- UKrfmParametros in '..\src\UKrfmParametros.pas' {KrfmParametros: TKRKForm};
20+ UKrfmParametros in '..\src\UKrfmParametros.pas' {KrfmParametros: TKRKForm},
21+ UFramBibliotecaDeObjetosCelestes in '..\src\UFramBibliotecaDeObjetosCelestes.pas' {FramBibliotecaDeObjetosCelestes: TFrame},
22+ UFormTimeOut in '..\src\UFormTimeOut.pas' {FormTimeOut},
23+ UClasses in '..\src\UClasses.pas';
2124
2225 {$R *.res}
2326
--- trunk/prj/OnStepper.dproj (revision 8)
+++ trunk/prj/OnStepper.dproj (revision 9)
@@ -136,6 +136,16 @@
136136 <Form>KrfmParametros</Form>
137137 <DesignClass>TKRKForm</DesignClass>
138138 </DCCReference>
139+ <DCCReference Include="..\src\UFramBibliotecaDeObjetosCelestes.pas">
140+ <Form>FramBibliotecaDeObjetosCelestes</Form>
141+ <FormType>dfm</FormType>
142+ <DesignClass>TFrame</DesignClass>
143+ </DCCReference>
144+ <DCCReference Include="..\src\UFormTimeOut.pas">
145+ <Form>FormTimeOut</Form>
146+ <FormType>dfm</FormType>
147+ </DCCReference>
148+ <DCCReference Include="..\src\UClasses.pas"/>
139149 <RcItem Include="..\res\icons8-casa-32.ico">
140150 <ResourceType>ICON</ResourceType>
141151 <ResourceId>IMAGATHOME</ResourceId>
--- trunk/src/UClasses.pas (nonexistent)
+++ trunk/src/UClasses.pas (revision 9)
@@ -0,0 +1,89 @@
1+unit UClasses;
2+
3+interface
4+
5+uses
6+ System.Generics.Collections, System.Classes, Vcl.ActnList, UFramBasico;
7+
8+type
9+ TFramBasicoClass = class of TFramBasico;
10+
11+ TListaDeTelas = class (TObjectList<TFramBasico>)
12+ private
13+ FTelaVisivel: TFramBasico;
14+
15+ procedure OcultarTelaVisivel;
16+ function TelaPeloNomeDaClasse(ANomeDaClasse: String): TFramBasico;
17+ public
18+ constructor Create; reintroduce;
19+
20+ procedure Limpar;
21+ procedure InstanciarTela(AOwner: TComponent; AClasseDaTela: TFramBasicoClass; AAction: TAction);
22+
23+ property TelaVisivel: TFramBasico read FTelaVisivel write FTelaVisivel;
24+ end;
25+
26+implementation
27+
28+uses
29+ System.SysUtils, KRK.Vcl.Forms, UClassesAjudantes;
30+
31+{ TFrameList }
32+
33+procedure TListaDeTelas.Limpar;
34+begin
35+ OcultarTelaVisivel;
36+ inherited Clear;
37+end;
38+
39+constructor TListaDeTelas.Create;
40+begin
41+ inherited Create(True);
42+
43+ FTelaVisivel := nil;
44+end;
45+
46+procedure TListaDeTelas.InstanciarTela(AOwner: TComponent; AClasseDaTela: TFramBasicoClass; AAction: TAction);
47+var
48+ Tela: TFramBasico;
49+begin
50+ Tela := TelaPeloNomeDaClasse(AClasseDaTela.ClassName);
51+
52+ if not Assigned(Tela) then
53+ begin
54+ Tela := AClasseDaTela.Create(AOwner,AAction);
55+ Add(Tela);
56+ end
57+ else
58+ // É necessário ocultar a tela visível porque precisamos remover sua
59+ // propriedade parent, do contrário poderia haver mais de uma tela visível
60+ // no form
61+ OcultarTelaVisivel;
62+
63+ FTelaVisivel := Tela;
64+ FTelaVisivel.Parent := TKRKForm(AOwner.Owner);
65+ FTelaVisivel.Action.Disable;
66+end;
67+
68+procedure TListaDeTelas.OcultarTelaVisivel;
69+begin
70+ if Assigned(FTelaVisivel) then
71+ begin
72+ FTelaVisivel.Parent := nil;
73+ FTelaVisivel.Action.Enable;
74+ end;
75+end;
76+
77+function TListaDeTelas.TelaPeloNomeDaClasse(ANomeDaClasse: String): TFramBasico;
78+begin
79+ Result := nil;
80+
81+ for var Tela: TFramBasico in Self do
82+ if LowerCase(Tela.ClassName) = LowerCase(ANomeDaClasse) then
83+ begin
84+ Result := Tela;
85+ Break;
86+ end;
87+end;
88+
89+end.
--- trunk/src/UConstantes.pas (revision 8)
+++ trunk/src/UConstantes.pas (revision 9)
@@ -13,7 +13,11 @@
1313 DESEJACONTINUAR = 'Deseja continuar?';
1414 CONEXAOALTERADADESEJAFECHARTUDO = 'A conexão atual será alterada e a fim de evevitar inconsistências, todas as telas do OnStepper que estejam abertas serão fechadas. Quaisquer dados não salvos nestas telas serão perdidos. Tem certeza de que quer continuar?';
1515 MEIODECONEXAOALTERADODESEJAFECHARTUDO = 'O meio de conexão atual será alterado e a fim de evevitar inconsistências, todas as telas do OnStepper que estejam abertas serão fechadas. Quaisquer dados não salvos nestas telas serão perdidos. Tem certeza de que quer continuar?';
16+ DESCONECTANDOAGUARDE = 'Por favor aguarde enquanto o OnStepper se desconecta do OnStep...';
1617
18+const
19+ POOLINGTIMEOUT = 3; // segundos
20+
1721 implementation
1822
1923 end.
--- trunk/src/UDamoPrincipal.pas (revision 8)
+++ trunk/src/UDamoPrincipal.pas (revision 9)
@@ -4,33 +4,30 @@
44
55 uses
66 System.SysUtils, System.Classes, System.ImageList, Vcl.ImgList, Vcl.Controls,
7- UPngImageList, Vcl.Forms, Vcl.Menus, System.Generics.Collections, UFramBasico,
8- Vcl.ActnList, UOnStepInfo, UTipos, UClassesAjudantes, Winapi.CommCtrl,
9- KRK.Rtl.Win.CommCtrl, KRK.Vcl.Controls, WinApi.Windows, UConfiguracoes;
7+ UPngImageList, Vcl.Forms, Vcl.Menus, UFramBasico, Vcl.ActnList, UOnStepInfo,
8+ UTipos, UClassesAjudantes, UClasses, Winapi.CommCtrl, KRK.Rtl.Win.CommCtrl,
9+ KRK.Vcl.Controls, WinApi.Windows, UConfiguracoes;
1010
1111 type
12- TFramBasicoClass = class of TFramBasico;
13-
1412 TDamoPrincipal = class(TDataModule)
15- PNILPrincpal: TPngImageList;
16- PNILBalloonHint: TPngImageList;
13+ PNIL16: TPngImageList;
14+ PNIL24: TPngImageList;
1715 KRTT: TKRKToolTip;
18- PNICPrincipal: TPngImageCollection;
16+ PNIC: TPngImageCollection;
17+ PNIL32: TPngImageList;
1918 procedure KRTTRegisterToolTip(const AToolTip: TToolTip);
2019 private
2120 { Private declarations }
2221 FOnStepInfo: TOnStepInfo;
23- FFrameList: TList<TFramBasico>;
24- FVisibleFrame: TFramBasico;
22+ FListaDeTelas: TListaDeTelas;
2523
2624 procedure HandleOnInfo(AIdentification: String; AStatus: TOnStepStatus);
2725
28- function FrameByClassName(AClassName: String): TFramBasico;
26+ function AlterandoOMeioDeConexao(APara: TMeioDeConexao): Boolean;
2927 procedure ImagemConectado;
3028 procedure ImagemDesconectado;
3129 procedure StartPooling;
3230 procedure PausePooling;
33- function AlterandoOMeioDeConexao(APara: TMeioDeConexao): Boolean;
3431
3532 // function GetOnStepConnected: Boolean;
3633 // function GetConfiguracoes: TConfiguracoes;
@@ -42,13 +39,18 @@
4239 function HandleTTNGetDispInfo(ANMDispInfo: PNMTTDispInfo): Boolean;
4340 function HandleTTNShow(ANMHdr: TNMHdr): Boolean;
4441
45- procedure ShowFrame(AFrameClass: TFramBasicoClass; AAction: TAction);
42+ procedure ExibirTela(AClasseDaTela: TFramBasicoClass; AAction: TAction);
4643 procedure TogglePooling;
4744 procedure ConectarViaUSB;
4845 procedure ConectarViaWiFi;
4946 procedure SincronizarGUI;
47+ procedure SincronizarAcoes;
48+ procedure SincronizarTelas;
49+ procedure FecharTodasAsTelas;
5050 procedure JanelaDeParametros;
5151 procedure RegistrarToolTips;
52+ procedure ProximaTela;
53+ procedure TelaAnterior;
5254
5355
5456 // property OnStepConnected: Boolean read GetOnStepConnected;
@@ -60,8 +62,8 @@
6062 {%CLASSGROUP 'Vcl.Controls.TControl'}
6163
6264 uses
63- Vcl.Graphics, Vcl.ExtCtrls, Vcl.Dialogs, Messages, UKRFMPrincipal,
64- UConstantes, UKRFMParametros;
65+ Vcl.Graphics, Vcl.ExtCtrls, Vcl.Dialogs, Winapi.Messages, Vcl.ActnMan,
66+ UConstantes, UKrfmPrincipal, UKrfmParametros, UFormTimeOut;
6567
6668 {$R *.dfm}
6769
@@ -75,14 +77,8 @@
7577 if (not AlterandoOMeioDeConexao(mdcUSB)) or (Application.MessageBox(PChar(MEIODECONEXAOALTERADODESEJAFECHARTUDO),PChar(DESEJACONTINUAR),MB_ICONWARNING or MB_YESNO) = IDYES) then
7678 begin
7779 if AlterandoOMeioDeConexao(mdcUSB) then
78- begin
79- { Fecha tudo }
80+ FecharTodasAsTelas;
8081
81- criar uma função para varrer FFrameList e fechar cada frame
82- fechar o frame ainda não foi criado, crie
83- veja FrameByClassName
84- end;
85-
8682 Configuracoes.MeioDeConexao := mdcUSB;
8783 Configuracoes.Save;
8884 end;
@@ -93,9 +89,7 @@
9389 if (not AlterandoOMeioDeConexao(mdcWiFi)) or (Application.MessageBox(PChar(MEIODECONEXAOALTERADODESEJAFECHARTUDO),PChar(DESEJACONTINUAR),MB_ICONWARNING or MB_YESNO) = IDYES) then
9490 begin
9591 if AlterandoOMeioDeConexao(mdcWiFi) then
96- begin
97- { Fecha tudo }
98- end;
92+ FecharTodasAsTelas;
9993
10094 Configuracoes.MeioDeConexao := mdcWiFi;
10195 Configuracoes.Save;
@@ -105,9 +99,8 @@
10599 constructor TDamoPrincipal.Create(AOwner: TComponent);
106100 begin
107101 inherited;
108- FFrameList := TList<TFramBasico>.Create;
109- FVisibleFrame := nil;
110- FOnStepInfo := TOnStepInfo.Create(3);
102+ FListaDeTelas := TListaDeTelas.Create;
103+ FOnStepInfo := TOnStepInfo.Create(POOLINGTIMEOUT);
111104 FOnStepInfo.OnInfo := HandleOnInfo;
112105 end;
113106
@@ -114,20 +107,22 @@
114107 destructor TDamoPrincipal.Destroy;
115108 begin
116109 FOnStepInfo.Free;
117- FFrameList.Free;
110+ // FListaDeJanelas automaticamente destrói seus itens quando eles são
111+ // removidos, quando a lista é limpa ou quando ela é liberada da memória, como
112+ // abaixo está sendo feito. O problema é que cada frame da lista já tem um
113+ // dono (o DataModule atual) e assim, no destrutor, a limpeza da lista de
114+ // janelas provoca uma exceção pois ela está tentando liberar a memória de
115+ // itens que cuja memória já foi liberada. Configurando aqui OnwsObjects para
116+ // false, faz com que a lista de janelas não tente liberar a memória de seus
117+ // itens
118+ FListaDeTelas.OwnsObjects := False;
119+ FListaDeTelas.Free;
118120 inherited;
119121 end;
120122
121-function TDamoPrincipal.FrameByClassName(AClassName: String): TFramBasico;
123+procedure TDamoPrincipal.FecharTodasAsTelas;
122124 begin
123- Result := nil;
124-
125- for var Frame: TFramBasico in FFrameList do
126- if LowerCase(Frame.ClassName) = LowerCase(AClassName) then
127- begin
128- Result := Frame;
129- Break;
130- end;
125+ FListaDeTelas.Limpar;
131126 end;
132127
133128 //function TDamoPrincipal.GetConfiguracoes: TConfiguracoes;
@@ -143,20 +138,20 @@
143138 procedure TDamoPrincipal.ImagemConectado;
144139 begin
145140 case Configuracoes.MeioDeConexao of
146- mdcNenhum: TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNICPrincipal.Items[0].PngImage);
147- mdcWiFi: TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNICPrincipal.Items[1].PngImage);
148- mdcUSB: TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNICPrincipal.Items[2].PngImage);
141+ mdcNenhum: TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNIC.Items[0].PngImage);
142+ mdcWiFi: TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNIC.Items[1].PngImage);
143+ mdcUSB: TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNIC.Items[2].PngImage);
149144 end;
150145 end;
151146
152147 procedure TDamoPrincipal.ImagemDesconectado;
153148 begin
154- TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNICPrincipal.Items[0].PngImage);
149+ TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNIC.Items[0].PngImage);
155150 end;
156151
157152 procedure TDamoPrincipal.JanelaDeParametros;
158153 begin
159- with TKRFMParametros.Create(Owner) do
154+ with TKRFMParametros.Create(Owner,Self) do
160155 begin
161156 KLEDURL.Text := Configuracoes.URL;
162157 KLEDPorta.Text := Configuracoes.Porta.ToString;
@@ -189,7 +184,7 @@
189184 // consequentemente uma conexão) bem sucedido e considera que o OnStep
190185 // está conectado caso ele esteja recebendo respostas no comando de
191186 // informações (GetOnStepIdentification)
192- if FOnStepInfo.IsConnected then
187+ if FOnStepInfo.IsOnStepResponsible then
193188 ImagemConectado
194189 else
195190 ImagemDesconectado;
@@ -196,10 +191,10 @@
196191
197192 TKRFMPrincipal(Owner).LABEOnStepIdentification.Caption := AIdentification;
198193
199- TKRFMPrincipal(Owner).IMAGAtHome.Hide;
200- TKRFMPrincipal(Owner).IMAGParked.Hide;
201- TKRFMPrincipal(Owner).IMAGTracking.Hide;
202- TKRFMPrincipal(Owner).IMAGGoTo.Hide;
194+// TKRFMPrincipal(Owner).IMAGAtHome.Hide;
195+// TKRFMPrincipal(Owner).IMAGParked.Hide;
196+// TKRFMPrincipal(Owner).IMAGTracking.Hide;
197+// TKRFMPrincipal(Owner).IMAGGoTo.Hide;
203198
204199 TKRFMPrincipal(Owner).IMAGAtHome.Visible := TOnStepStatuses.AtHome in AStatus;
205200 TKRFMPrincipal(Owner).IMAGParked.Visible := not (TOnStepStatuses.NotParked in AStatus);
@@ -217,13 +212,13 @@
217212 case Configuracoes.MeioDeConexao of
218213 mdcNenhum: ANMDispInfo.lpszText := PChar(MEIODECOMUNICACAONAOSELECIONADO);
219214 mdcWiFi: begin
220- if FOnStepInfo.IsConnected then
215+ if FOnStepInfo.IsOnStepResponsible then
221216 ANMDispInfo.lpszText := PChar(CONEXAOVIAREDESEMFIO)
222217 else
223218 ANMDispInfo.lpszText := PChar(CONEXAOSERAVIAREDESEMFIO);
224219 end;
225220 mdcUSB: begin
226- if FOnStepInfo.IsConnected then
221+ if FOnStepInfo.IsOnStepResponsible then
227222 ANMDispInfo.lpszText := PChar(CONEXAOVIAUSB)
228223 else
229224 ANMDispInfo.lpszText := PChar(CONEXAOSERAVIAUSB);
@@ -262,58 +257,86 @@
262257 procedure TDamoPrincipal.PausePooling;
263258 begin
264259 FOnStepInfo.Pause;
260+ TFormTimeOut.ShowMe(Owner,POOLINGTIMEOUT,DESCONECTANDOAGUARDE);
265261
266262 TKRFMPrincipal(Owner).LABEOnStepIdentification.Caption := 'OnStep desconectado. Clique na imagem à esquerda para conectar...';
267263 // de acordo com a configuracao, escolher a imagem correta aqui
268- TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNICPrincipal.Items[0].PngImage);
264+ TKRFMPrincipal(Owner).IMAGTipoDeConexao.Picture.Assign(PNIC.Items[0].PngImage);
269265 end;
270266
267+procedure TDamoPrincipal.ProximaTela;
268+begin
269+// FListaDeTelas.TelaVisivel.Parent := nil;
270+end;
271+
271272 procedure TDamoPrincipal.RegistrarToolTips;
272273 begin
273274 KRTT.RegisterToolTips;
274275 end;
275276
276-procedure TDamoPrincipal.ShowFrame(AFrameClass: TFramBasicoClass; AAction: TAction);
277-var
278- Frame: TFramBasico;
277+procedure TDamoPrincipal.ExibirTela(AClasseDaTela: TFramBasicoClass; AAction: TAction);
279278 begin
280- Frame := FrameByClassName(AFrameClass.ClassName);
281-
282- if not Assigned(Frame) then
283- begin
284- Frame := AFrameClass.Create(Self,AAction);
285- FFrameList.Add(Frame);
286- end
287- else
288- begin
289- FVisibleFrame.Parent := nil;
290- FVisibleFrame.Action.Enable;
291- end;
292-
293- FVisibleFrame := Frame;
294- FVisibleFrame.Parent := TForm(Owner);
295- FVisibleFrame.Action.Disable;
279+ FListaDeTelas.InstanciarTela(Self,AClasseDaTela,AAction);
296280 end;
297281
298282 procedure TDamoPrincipal.SincronizarGUI;
299283 begin
300- // IsRunning significa que a Thread de pooling está ativa e IsConnected
301- // significa que o OnStep está acessível e respondendo a comandos. IsConnected
302- // depende de IsRunning no sentido de que IsConnected só poderá ser true
303- // quando IsRunning for true
304- TKRFMPrincipal(Owner).ACTNLocaisDeObservacao.Enabled := FOnStepInfo.IsConnected;
284+ // Habilita ou desabilita as ações de acordo com alguns critérios
285+ SincronizarAcoes;
305286
306-// Desabilitar ou habilitar todos os frames abertos de acordo com isconnected
287+ // Desabilitar ou habilitar os frames abertos que dependem do OnStep de acordo
288+ // com o status de conexão com o mesmo
289+ SincronizarTelas;
290+end;
307291
292+procedure TDamoPrincipal.SincronizarAcoes;
293+begin
294+ // ActionBars são todos os controles visuais que tiram proveito de
295+ // TActionManager (AMANPrincipal). AMANPrincipal.ActionBars[0] é o menu
296+ // principal, o qual tem alguns itens de primeiro nível. O primeiro destes
297+ // itens é o menu "OnStep", portanto AMANPrincipal.ActionBars[0].Items[0] diz
298+ // respeito ao menu "OnStep" que contém todos os ítens de menu que abrem telas
299+ // que dependem de uma conexão com o OnStep. Abaixo varremos estes itens de
300+ // menu e obtemos as ações associadas para a fim de habilitá-las ou
301+ // desabilitá-las
302+ for var CI: TCollectionItem in TKRFMPrincipal(Owner).AMANPrincipal.ActionBars[0].Items[0].Items do
303+ begin
304+ if Assigned(TActionClientItem(CI).Action) then
305+ // IsThreadRunning significa que a thread de pooling está ativa e
306+ // IsOnStepResponsible significa que o OnStep está acessível e respondendo
307+ // a comandos. IsOnStepResponsible depende de IsThreadRunning no sentido
308+ // de que IsOnStepResponsible só poderá ser true quando IsThreadRunning
309+ // for true, logo, ao usar IsOnStepResponsible, implicitamente estamos
310+ // verificando se a thread de pooling está ativa
311+ TActionClientItem(CI).Action.Enabled := FOnStepInfo.IsOnStepResponsible and FOnStepInfo.IsThreadRunning
312+ and (not Assigned(FListaDeTelas.TelaVisivel)
313+ or (FListaDeTelas.TelaVisivel.Action <> TActionClientItem(CI).Action));
308314
309- TKRFMPrincipal(Owner).ACTNConexaoViaRedeSemFio.Enabled := not FOnStepInfo.IsRunning;
310- TKRFMPrincipal(Owner).ACTNConexaoViaUsb.Enabled := not FOnStepInfo.IsRunning;
311- TKRFMPrincipal(Owner).ACTNParametros.Enabled := not FOnStepInfo.IsRunning;
315+ end;
316+ // De forma análoga, os itens do menu "Configurações" precisam ser habilitados
317+ // ou desabilitados, porém ao contrário do menu "OnStep", que exige que haja
318+ // uma conexão bem sucedida, os itens do men "Configurações" consideram apenas
319+ // se a thread de pooling está inativa e isso se verifica com IsThreadRunning
320+ for var CI: TCollectionItem in TKRFMPrincipal(Owner).AMANPrincipal.ActionBars[0].Items[1].Items do
321+ begin
322+ if Assigned(TActionClientItem(CI).Action) then
323+ TActionClientItem(CI).Action.Enabled := not FOnStepInfo.IsThreadRunning;
324+ end;
325+ // Estes itens tem sua propriedade Checked configurada de acordo com o meio de
326+ // conexão salvo nas configurações
312327 TKRFMPrincipal(Owner).ACTNConexaoViaRedeSemFio.Checked := Configuracoes.MeioDeConexao = mdcWiFi;
313328 TKRFMPrincipal(Owner).ACTNConexaoViaUsb.Checked := Configuracoes.MeioDeConexao = mdcUSB;
314- TKRFMPrincipal(Owner).ACTNParametros.Enabled := not FOnStepInfo.IsRunning;
315329 end;
316330
331+procedure TDamoPrincipal.SincronizarTelas;
332+begin
333+ // As telas do OnStep são habilitadas ou desabilitadas de acordo com o status
334+ // de responsibilidade do OnStep
335+ for var Tela: TFramBasico in FListaDeTelas do
336+ tanto aqui como no metodo anterior, eu usei isthreadrunning apenas, mas nao sei se é correto. Se for, pra que entao serve IsOnStepResponsible
337+ Tela.Enabled := FOnStepInfo.IsThreadRunning {and FOnStepInfo.IsOnStepResponsible};
338+end;
339+
317340 procedure TDamoPrincipal.StartPooling;
318341 begin
319342 if Configuracoes.MeioDeConexao <> mdcNenhum then
@@ -327,9 +350,14 @@
327350 Application.MessageBox(PChar(MEIODECOMUNICACAONAOSELECIONADO),PChar(MEIODECONEXAO),MB_ICONWARNING);
328351 end;
329352
353+procedure TDamoPrincipal.TelaAnterior;
354+begin
355+
356+end;
357+
330358 procedure TDamoPrincipal.TogglePooling;
331359 begin
332- if FOnStepInfo.IsRunning then
360+ if FOnStepInfo.IsThreadRunning then
333361 PausePooling
334362 else
335363 StartPooling;
--- trunk/src/UFormTimeOut.pas (nonexistent)
+++ trunk/src/UFormTimeOut.pas (revision 9)
@@ -0,0 +1,57 @@
1+unit UFormTimeOut;
2+
3+interface
4+
5+uses
6+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
8+ KRK.Vcl.StdCtrls;
9+
10+type
11+ TFormTimeOut = class(TForm)
12+ TMER: TTimer;
13+ KPAN: TKRKPanel;
14+ LABE: TLabel;
15+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
16+ procedure TMERTimer(Sender: TObject);
17+ procedure FormShow(Sender: TObject);
18+ private
19+ { Private declarations }
20+ public
21+ { Public declarations }
22+ class procedure ShowMe(AOwner: TComponent; ATimeOut: Byte; AMessage: String);
23+ end;
24+
25+implementation
26+
27+{$R *.dfm}
28+
29+{ TFormTimeOut }
30+
31+procedure TFormTimeOut.FormClose(Sender: TObject; var Action: TCloseAction);
32+begin
33+ Action := caFree;
34+end;
35+
36+procedure TFormTimeOut.FormShow(Sender: TObject);
37+begin
38+ TMER.Enabled := True;
39+end;
40+
41+class procedure TFormTimeOut.ShowMe(AOwner: TComponent; ATimeOut: Byte; AMessage: String);
42+begin
43+ with Self.Create(AOwner) do
44+ begin
45+ TMER.Interval := ATimeOut * 1000;
46+ LABE.Caption := AMessage;
47+ ShowModal;
48+ end;
49+end;
50+
51+procedure TFormTimeOut.TMERTimer(Sender: TObject);
52+begin
53+ TMER.Enabled := False;
54+ ModalResult := mrOk;
55+end;
56+
57+end.
--- trunk/src/UFramBasico.pas (revision 8)
+++ trunk/src/UFramBasico.pas (revision 9)
@@ -13,12 +13,15 @@
1313 LABETitulo: TLabel;
1414 IMAGTitulo: TImage;
1515 IMAGHelp: TImage;
16+ IMAGRecarregar: TImage;
1617 procedure IMAGHelpClick(Sender: TObject);
18+ procedure IMAGRecarregarClick(Sender: TObject);
1719 private
1820 { Private declarations }
1921 FAction: TAction;
2022 protected
21- procedure ShowHelp; virtual;
23+ procedure ExibirAjuda; virtual;
24+ procedure Recarregar; virtual;
2225 public
2326 { Public declarations }
2427 constructor Create(AOwner: TComponent; AAction: TAction); reintroduce;
@@ -40,12 +43,23 @@
4043
4144 procedure TFramBasico.IMAGHelpClick(Sender: TObject);
4245 begin
43- ShowHelp;
46+ ExibirAjuda;
4447 end;
4548
46-procedure TFramBasico.ShowHelp;
49+procedure TFramBasico.IMAGRecarregarClick(Sender: TObject);
4750 begin
48- Application.MessageBox('Ajuda indisponível','Ajuda indisponível',MB_ICONWARNING);
51+ Recarregar;
4952 end;
5053
54+procedure TFramBasico.ExibirAjuda;
55+begin
56+ Application.MessageBox('Sobrescreva o método ExibirAjuda','Não implementado',MB_ICONWARNING);
57+end;
58+
59+procedure TFramBasico.Recarregar;
60+begin
61+ Application.MessageBox('Sobrescreva o método Recarregar','Não implementado',MB_ICONWARNING);
62+end;
63+
64+
5165 end.
--- trunk/src/UFramBibliotecaDeObjetosCelestes.pas (nonexistent)
+++ trunk/src/UFramBibliotecaDeObjetosCelestes.pas (revision 9)
@@ -0,0 +1,22 @@
1+unit UFramBibliotecaDeObjetosCelestes;
2+
3+interface
4+
5+uses
6+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, UFramBasico, Vcl.Imaging.pngimage,
8+ Vcl.ExtCtrls, Vcl.StdCtrls, KRK.Vcl.StdCtrls;
9+
10+type
11+ TFramBibliotecaDeObjetosCelestes = class(TFramBasico)
12+ private
13+ { Private declarations }
14+ public
15+ { Public declarations }
16+ end;
17+
18+implementation
19+
20+{$R *.dfm}
21+
22+end.
--- trunk/src/UFramLocaisDeObservacao.pas (revision 8)
+++ trunk/src/UFramLocaisDeObservacao.pas (revision 9)
@@ -14,10 +14,11 @@
1414 TASHLocal2: TTabSheet;
1515 TASHLocal3: TTabSheet;
1616 TASHLocal4: TTabSheet;
17+ LAED: TLabeledEdit;
1718 private
1819 { Private declarations }
1920 protected
20- procedure ShowHelp; override;
21+ procedure ExibirAjuda; override;
2122 public
2223 { Public declarations }
2324 end;
@@ -28,7 +29,7 @@
2829
2930 { TFramLocaisDeObservacao }
3031
31-procedure TFramLocaisDeObservacao.ShowHelp;
32+procedure TFramLocaisDeObservacao.ExibirAjuda;
3233 begin
3334 // inherited;
3435 Application.MessageBox('A ajuda para a funcionalidade "Locais de Observação" não está disponível','Ajuda indisponível',MB_ICONWARNING);
--- trunk/src/UKrfmParametros.pas (revision 8)
+++ trunk/src/UKrfmParametros.pas (revision 9)
@@ -6,7 +6,7 @@
66
77 uses
88 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, KRK.Vcl.Forms,
9- Vcl.ComCtrls, Vcl.StdCtrls, KRK.Vcl.StdCtrls, KRK.Vcl.ExtCtrls;
9+ Vcl.ComCtrls, Vcl.StdCtrls, KRK.Vcl.StdCtrls, KRK.Vcl.ExtCtrls, UDamoPrincipal;
1010
1111 type
1212 TKrfmParametros = class(TKRKForm)
@@ -21,9 +21,12 @@
2121 procedure KRKFormOkButtonClick(Sender: TObject);
2222 procedure KRKFormCancelButtonClick(Sender: TObject);
2323 private { Declarações privadas }
24+ FDamoPrincipal: TDamoPrincipal;
25+
2426 function AlterandoAConexaoAtual: Boolean;
2527 protected { Declarações protegidas }
2628 public { Declarações públicas }
29+ constructor Create(AOwner: TComponent; ADamoPrincipal: TDamoPrincipal); reintroduce;
2730 end;
2831
2932 implementation
@@ -45,6 +48,12 @@
4548 end;
4649 end;
4750
51+constructor TKrfmParametros.Create(AOwner: TComponent; ADamoPrincipal: TDamoPrincipal);
52+begin
53+ inherited Create(AOwner);
54+ FDamoPrincipal := ADamoPrincipal;
55+end;
56+
4857 procedure TKrfmParametros.KRKFormCancelButtonClick(Sender: TObject);
4958 begin
5059 ModalResult := mrCancel;
@@ -65,9 +74,7 @@
6574 if (not AlterandoAConexaoAtual) or (Application.MessageBox(PChar(CONEXAOALTERADADESEJAFECHARTUDO),PChar(DESEJACONTINUAR),MB_ICONWARNING or MB_YESNO) = IDYES) then
6675 begin
6776 if AlterandoAConexaoAtual then
68- begin
69- { Fechar tudo aqui }
70- end;
77+ FDamoPrincipal.FecharTodasAsTelas;
7178
7279 ModalResult := mrOk;
7380 end
--- trunk/src/UKrfmPrincipal.pas (revision 8)
+++ trunk/src/UKrfmPrincipal.pas (revision 9)
@@ -30,6 +30,10 @@
3030 IMAGTracking: TImage;
3131 IMAGGoTo: TImage;
3232 ACTNParametros: TAction;
33+ ACTNBibliotecaDeObjetosCelestes: TAction;
34+ ACTBPrincipal: TActionToolBar;
35+ ACTNProximaTela: TAction;
36+ ACTNTelaAnterior: TAction;
3337 procedure ACTNLocaisDeObservacaoExecute(Sender: TObject);
3438 procedure FormCreate(Sender: TObject);
3539 function KRKFormTTNShow(ANMHdr: tagNMHDR): Boolean;
@@ -39,6 +43,8 @@
3943 procedure ACTNConexaoViaUsbExecute(Sender: TObject);
4044 procedure AMANPrincipalUpdate(Action: TBasicAction; var Handled: Boolean);
4145 procedure ACTNParametrosExecute(Sender: TObject);
46+ procedure ACTNBibliotecaDeObjetosCelestesExecute(Sender: TObject);
47+ procedure ACTNProximaTelaExecute(Sender: TObject);
4248 private { Declarações privadas }
4349 FDamoPrincipal: TDamoPrincipal;
4450 public { Declarações públicas }
@@ -53,7 +59,8 @@
5359 {$R *.dfm}
5460
5561 uses
56- UFramLocaisDeObservacao, UClassesAjudantes, KRK.Rtl.Win.CommCtrl, UConstantes;
62+ KRK.Rtl.Win.CommCtrl, UConstantes, UClassesAjudantes, UFramLocaisDeObservacao,
63+ UFramBibliotecaDeObjetosCelestes;
5764
5865 { TFormPrincipal }
5966
@@ -62,6 +69,11 @@
6269 FDamoPrincipal.ConectarViaUSB;
6370 end;
6471
72+procedure TKrfmPrincipal.ACTNBibliotecaDeObjetosCelestesExecute(Sender: TObject);
73+begin
74+ FDamoPrincipal.ExibirTela(TFramBibliotecaDeObjetosCelestes,TAction(Sender));
75+end;
76+
6577 procedure TKrfmPrincipal.ACTNConexaoViaRedeSemFioExecute(Sender: TObject);
6678 begin
6779 FDamoPrincipal.ConectarViaWiFi;
@@ -69,7 +81,7 @@
6981
7082 procedure TKrfmPrincipal.ACTNLocaisDeObservacaoExecute(Sender: TObject);
7183 begin
72- FDamoPrincipal.ShowFrame(TFramLocaisDeObservacao,TAction(Sender));
84+ FDamoPrincipal.ExibirTela(TFramLocaisDeObservacao,TAction(Sender));
7385 end;
7486
7587 procedure TKrfmPrincipal.ACTNParametrosExecute(Sender: TObject);
@@ -77,6 +89,11 @@
7789 FDamoPrincipal.JanelaDeParametros;
7890 end;
7991
92+procedure TKrfmPrincipal.ACTNProximaTelaExecute(Sender: TObject);
93+begin
94+ FDamoPrincipal.ProximaTela;
95+end;
96+
8097 procedure TKrfmPrincipal.AMANPrincipalUpdate(Action: TBasicAction; var Handled: Boolean);
8198 begin
8299 FDamoPrincipal.SincronizarGUI;
--- trunk/src/UOnStepInfo.pas (revision 8)
+++ trunk/src/UOnStepInfo.pas (revision 9)
@@ -18,7 +18,7 @@
1818 FTimeOut: TEvent;
1919 FTimeOutValue: Byte;
2020 FException: Exception;
21- FRunning: Boolean;
21+ FIsThreadRunning: Boolean;
2222 FOnStepIdentification: String;
2323 FOnStepStatus: TOnStepStatus;
2424
@@ -30,7 +30,7 @@
3030 procedure ForwareException;
3131 procedure ClearAllInfo;
3232
33- function GetIsConnected: Boolean;
33+ function GetIsOnStepResponsible: Boolean;
3434 protected
3535 procedure Execute; override;
3636 public
@@ -40,8 +40,8 @@
4040 procedure Pause;
4141 procedure Restart;
4242
43- property IsRunning: Boolean read FRunning;
44- property IsConnected: Boolean read GetIsConnected;
43+ property IsThreadRunning: Boolean read FIsThreadRunning;
44+ property IsOnStepResponsible: Boolean read GetIsOnStepResponsible;
4545
4646 property OnInfo: TOnInfo read FOnInfo write FOnInfo;
4747 end;
@@ -69,7 +69,7 @@
6969 FPauseRestart := nil;
7070 FTimeOut := nil;
7171 FTimeOutValue := ATimeOutValue;
72- FRunning := False;
72+ FIsThreadRunning := False;
7373 FOnStepIdentification := FALHANAOBTENCAODEDADOS;
7474 end;
7575
@@ -106,25 +106,28 @@
106106 // da thread, as quais realmente precisam ser repassadas ao usuário
107107 try
108108 FPauseRestart := TEvent.Create(nil,True,True,'Pause/Restart');
109- // --- ---- ---- -----
110- // | | | |
111- // | | | \......> Nome único para a instância, do contrário, será usado o já existente
112- // | | \............> Podemos já criar SINALIZADO (no caso isso significa que a thread não estará pausada inicialmente)
113- // | \.................> Indica se será resetado MANUALMENTE ou AUTOMATICAMENTE
114- // \......................> Atributos, nil basta na maioria das necessidades
109+ // --- ---- ---- ---------------
110+ // | | | |
111+ // | | | \--> Nome único para a instância, do contrário, será usado o já existente
112+ // | | \------------> Podemos já criar SINALIZADO (no caso isso significa que a thread não estará pausada inicialmente)
113+ // | \-----------------> Indica se será resetado MANUALMENTE ou AUTOMATICAMENTE
114+ // \----------------------> Atributos, nil basta na maioria das necessidades
115115 FTimeOut := TEvent.Create(nil,False,False,'TimeOut');
116116
117117 while not Terminated do
118118 begin
119- // Os dois campos abaixo são usados como flags de identificação, por isso
120- // eles precisam ser "zerados" antes de um possível pausa da thread atual
121- FRunning := False;
122- FOnStepIdentification := FALHANAOBTENCAODEDADOS;
123-
119+ // Antes de uma possível pausa configuramos este flag como false, de forma
120+ // que caso a pausa ocorra, a propriedade IsThreadRunning retorne false
121+ // durante o tempo da pausa
122+ FIsThreadRunning := False;
123+ // Caso uma pausa tenha sido solicitada, o fluxo de execução ficará parado
124+ // na linha abaixo até que a pausa seja removida
124125 WR := FPauseRestart.WaitFor(INFINITE);
126+ // Quando o fluxo de execução chega aqui, a thread atual foi despausada.
127+ // Caso uma pausa não tenha sido feita, a alterância de false para true
128+ // não será percebida
129+ FIsThreadRunning := True;
125130
126- FRunning := True;
127-
128131 if not Terminated then
129132 case WR of
130133 wrSignaled: begin
@@ -188,7 +191,7 @@
188191 end;
189192 end;
190193
191-function TOnStepInfo.GetIsConnected: Boolean;
194+function TOnStepInfo.GetIsOnStepResponsible: Boolean;
192195 begin
193196 Result := FOnStepIdentification <> FALHANAOBTENCAODEDADOS;
194197 end;
Show on old repository browser