リビジョン | 6 (tree) |
---|---|
日時 | 2022-03-16 07:45:16 |
作者 | ![]() |
Utilização do novo componente TKRKToolTip
@@ -146,6 +146,10 @@ | ||
146 | 146 | <ResourceType>ICON</ResourceType> |
147 | 147 | <ResourceId>IMAGTRACKING</ResourceId> |
148 | 148 | </RcItem> |
149 | + <RcItem Include="..\res\icons8-gestor-de-networking-32.ico"> | |
150 | + <ResourceType>ICON</ResourceType> | |
151 | + <ResourceId>IMAGTIPODECONEXAO</ResourceId> | |
152 | + </RcItem> | |
149 | 153 | <BuildConfiguration Include="Release"> |
150 | 154 | <Key>Cfg_2</Key> |
151 | 155 | <CfgParent>Base</CfgParent> |
@@ -168,6 +172,12 @@ | ||
168 | 172 | </Source> |
169 | 173 | </Delphi.Personality> |
170 | 174 | <Deployment Version="3"> |
175 | + <DeployFile LocalName="..\res\icons8-gestor-de-networking-32.ico" Configuration="Debug" Class="ProjectFile"> | |
176 | + <Platform Name="Win32"> | |
177 | + <RemoteDir>.\</RemoteDir> | |
178 | + <Overwrite>true</Overwrite> | |
179 | + </Platform> | |
180 | + </DeployFile> | |
171 | 181 | <DeployFile LocalName="..\bin\OnStepper.exe" Configuration="Debug" Class="ProjectOutput"> |
172 | 182 | <Platform Name="Win32"> |
173 | 183 | <RemoteName>OnStepper.exe</RemoteName> |
@@ -3,7 +3,7 @@ | ||
3 | 3 | interface |
4 | 4 | |
5 | 5 | uses |
6 | - Vcl.ActnList; | |
6 | + Vcl.ActnList, Vcl.Controls, System.Types; | |
7 | 7 | |
8 | 8 | type |
9 | 9 | TActionHelper = class Helper for TAction |
@@ -12,8 +12,17 @@ | ||
12 | 12 | procedure Enable; |
13 | 13 | end; |
14 | 14 | |
15 | + TControlHelper = class Helper for TControl | |
16 | + public | |
17 | + function Rect: TRect; | |
18 | + function UniqueId: Cardinal; | |
19 | + end; | |
20 | + | |
15 | 21 | implementation |
16 | 22 | |
23 | +uses | |
24 | + System.Classes; | |
25 | + | |
17 | 26 | { TActionHelper } |
18 | 27 | |
19 | 28 | procedure TActionHelper.Disable; |
@@ -26,4 +35,16 @@ | ||
26 | 35 | Enabled := True; |
27 | 36 | end; |
28 | 37 | |
38 | +{ TControlHelper } | |
39 | + | |
40 | +function TControlHelper.Rect: TRect; | |
41 | +begin | |
42 | + Result := System.Classes.Rect(Left,Top,Left + Width,Top + Height); | |
43 | +end; | |
44 | + | |
45 | +function TControlHelper.UniqueId: Cardinal; | |
46 | +begin | |
47 | + Result := Parent.Handle + Cardinal(ComponentIndex); | |
48 | +end; | |
49 | + | |
29 | 50 | end. |
@@ -14,7 +14,8 @@ | ||
14 | 14 | TDamoPrincipal = class(TDataModule) |
15 | 15 | PNILPrincpal: TPngImageList; |
16 | 16 | PNILBalloonHint: TPngImageList; |
17 | - KRBHPrincipal: TKRKBalloonHint; | |
17 | + KRTT: TKRKToolTip; | |
18 | + procedure KRTTRegisterToolTip(const AToolTip: TToolTip); | |
18 | 19 | private |
19 | 20 | { Private declarations } |
20 | 21 | FOnStepInfo: TOnStepInfo; |
@@ -22,12 +23,8 @@ | ||
22 | 23 | FVisibleFrame: TFramBasico; |
23 | 24 | |
24 | 25 | function FrameByClassName(AClassName: String): TFramBasico; |
26 | + | |
25 | 27 | procedure HandleOnInfo(AIdentification: String; AStatus: TOnStepStatus); |
26 | - | |
27 | - procedure ShowBalloonHint(AControl: TControl); | |
28 | - procedure HideBalloonHint; | |
29 | - procedure HandleMouseEnter(ASender: TObject); | |
30 | - procedure HandleMouseLeave(ASender: TObject); | |
31 | 28 | public |
32 | 29 | { Public declarations } |
33 | 30 | constructor Create(AOwner: TComponent); override; |
@@ -36,17 +33,6 @@ | ||
36 | 33 | procedure ShowFrame(AFrameClass: TFramBasicoClass; AAction: TAction); |
37 | 34 | procedure StartPooling; |
38 | 35 | procedure PausePooling; |
39 | - procedure ConfigureBalloonHint(AControl: TControl); | |
40 | - | |
41 | -// procedure s1; | |
42 | - procedure s11; | |
43 | - procedure h1; | |
44 | - procedure h11; | |
45 | - procedure s2; | |
46 | - procedure s22; | |
47 | - procedure h2; | |
48 | - procedure h22; | |
49 | - procedure MSG; | |
50 | 36 | end; |
51 | 37 | |
52 | 38 | implementation |
@@ -54,7 +40,8 @@ | ||
54 | 40 | {%CLASSGROUP 'Vcl.Controls.TControl'} |
55 | 41 | |
56 | 42 | uses |
57 | - UKRFMPrincipal, Winapi.Windows, Vcl.Graphics, Vcl.ExtCtrls, Dialogs, Winapi.CommCtrl; | |
43 | + UKRFMPrincipal, Vcl.Graphics, Vcl.ExtCtrls, Dialogs, | |
44 | + Winapi.CommCtrl, Windows, Messages; | |
58 | 45 | |
59 | 46 | {$R *.dfm} |
60 | 47 |
@@ -67,74 +54,8 @@ | ||
67 | 54 | FOnStepInfo.OnInfo := HandleOnInfo; |
68 | 55 | end; |
69 | 56 | |
70 | -procedure TDamoPrincipal.s11; | |
71 | -//var | |
72 | -// T: TToolInfo; | |
73 | -begin | |
74 | -// T.cbSize := SizeOf(TToolInfo); | |
75 | -// T.hwnd := 0; | |
76 | -// T.uId := 1; | |
77 | -// SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(True),LPARAM(@T)); | |
78 | -end; | |
79 | - | |
80 | -procedure TDamoPrincipal.s2; | |
81 | -//var | |
82 | -// P2: TKRKTrackingToolTipParams; | |
83 | -begin | |
84 | -// P2 := Default(TKRKTrackingToolTipParams); | |
85 | -// P2.IconHandle := 2; | |
86 | -// P2.Title := 'Título 2'; | |
87 | -// P2.Text := 'Este é um texto menor, porém que precisa de um ToolTip maior que 100 pixels, portanto ele será quebrado'; | |
88 | -// P2.X := 500; | |
89 | -// P2.Y := 500; | |
90 | -// FKRBH.Show(0,2,P2); | |
91 | -end; | |
92 | - | |
93 | -procedure TDamoPrincipal.s22; | |
94 | -//var | |
95 | -// T: TToolInfo; | |
96 | -begin | |
97 | -// T.cbSize := SizeOf(TToolInfo); | |
98 | -// T.hwnd := 0; | |
99 | -// T.uId := 2; | |
100 | -// SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(True),LPARAM(@T)); | |
101 | -end; | |
102 | - | |
103 | -procedure TDamoPrincipal.h1; | |
104 | -begin | |
105 | -// FKRBH.Hide; | |
106 | -end; | |
107 | - | |
108 | - | |
109 | -procedure TDamoPrincipal.h11; | |
110 | -//var | |
111 | -// T: TToolInfo; | |
112 | -begin | |
113 | -// T.cbSize := SizeOf(TToolInfo); | |
114 | -// T.hwnd := 0; | |
115 | -// T.uId := 1; | |
116 | -// SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(False),LPARAM(@T)); | |
117 | -end; | |
118 | - | |
119 | -procedure TDamoPrincipal.h2; | |
120 | -begin | |
121 | -// FKRBH.Hide; | |
122 | -end; | |
123 | - | |
124 | -procedure TDamoPrincipal.h22; | |
125 | -//var | |
126 | -// T: TToolInfo; | |
127 | -begin | |
128 | -// T.cbSize := SizeOf(TToolInfo); | |
129 | -// T.hwnd := 0; | |
130 | -// T.uId := 2; | |
131 | -// SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(False),LPARAM(@T)); | |
132 | -end; | |
133 | - | |
134 | 57 | destructor TDamoPrincipal.Destroy; |
135 | 58 | begin |
136 | -// FKRBH.Free; | |
137 | - | |
138 | 59 | FOnStepInfo.Free; |
139 | 60 | FFrameList.Free; |
140 | 61 | inherited; |
@@ -152,39 +73,6 @@ | ||
152 | 73 | end; |
153 | 74 | end; |
154 | 75 | |
155 | -procedure TDamoPrincipal.HandleMouseEnter(ASender: TObject); | |
156 | -//var | |
157 | -// Icon: HICON; | |
158 | -begin | |
159 | -// Icon := LoadIcon(HInstance,PWideChar(UpperCase(AControl.Name))); | |
160 | -// | |
161 | -// if Icon > 0 then | |
162 | -// begin | |
163 | -// AControl.Hint := AControl.Hint + '|' + IntToStr(Icon); | |
164 | -// DestroyIcon(Icon); | |
165 | -// end; | |
166 | - | |
167 | - | |
168 | - | |
169 | -// eu estou tentando fazer com que TipIconId funcione, mas descobri que ao usar AUtoGetTexts (published) | |
170 | -// caso eu mude ele aqui embaixo, FToolInfo é todo vazio e por isso o hint não é mostrado | |
171 | -// se eu coloco Autogettexts no OI como false desde o começo ele pega o texto padrão. | |
172 | - | |
173 | -// KRBHPrincipal.AutoGetTexts := fALSE; | |
174 | - //KRBHPrincipal.TipIcon := tiInfo; | |
175 | -// KRBHPrincipal.TipIconId := 'MAINICON'; | |
176 | - | |
177 | -// em setautogettexts só resetar se houve mudança de propriedade. Nao fazer isso | |
178 | -// faz com que toda vez o valor dos textos sejam sobrescritos | |
179 | - | |
180 | - ShowBalloonHint(TControl(ASender)); | |
181 | -end; | |
182 | - | |
183 | -procedure TDamoPrincipal.HandleMouseLeave(ASender: TObject); | |
184 | -begin | |
185 | - HideBalloonHint; | |
186 | -end; | |
187 | - | |
188 | 76 | procedure TDamoPrincipal.HandleOnInfo(AIdentification: String; AStatus: TOnStepStatus); |
189 | 77 | var |
190 | 78 | KRFM: TKRFMPrincipal; |
@@ -212,69 +100,17 @@ | ||
212 | 100 | end; |
213 | 101 | end; |
214 | 102 | |
215 | -procedure TDamoPrincipal.HideBalloonHint; | |
103 | +procedure TDamoPrincipal.KRTTRegisterToolTip(const AToolTip: TToolTip); | |
216 | 104 | begin |
217 | - KRBHPrincipal.Hide; | |
105 | + AToolTip.Text := GetLongHint(AToolTip.Tool.Hint); | |
106 | + AToolTip.Tool.ShowHint := False; | |
218 | 107 | end; |
219 | 108 | |
220 | -procedure TDamoPrincipal.MSG; | |
221 | -begin | |
222 | -// ShowMessage(Inttostr(SendMessage(FKRBH.ToolTipWindowHandle,TTM_GETTOOLCOUNT,0,0))); | |
223 | - | |
224 | -//var T: TToolInfo := Default(TToolInfo); | |
225 | -//T.cbSize := SizeOf(TToolInfo); | |
226 | -// | |
227 | -//SendMessage(FKRBH.ToolTipWindowHandle,TTM_ENUMTOOLS,0,LPARAM(@T)); | |
228 | -//SendMessage(FKRBH.ToolTipWindowHandle,TTM_ENUMTOOLS,1,LPARAM(@T)); | |
229 | -// | |
230 | -//T := Default(TToolInfo); | |
231 | -//T.cbSize := SizeOf(TToolInfo); | |
232 | -// | |
233 | -//if SendMessage(FKRBH.ToolTipWindowHandle,TTM_GETCURRENTTOOL,0,LPARAM(@T)) > 0 then | |
234 | -// ShowMessage('tem'); | |
235 | - | |
236 | -end; | |
237 | - | |
238 | -type | |
239 | - TControlHack = class(TControl); | |
240 | - | |
241 | -procedure TDamoPrincipal.ConfigureBalloonHint(AControl: TControl); | |
242 | -var | |
243 | - Icon: HICON; | |
244 | -begin | |
245 | - Icon := LoadIcon(HInstance,PWideChar(UpperCase(AControl.Name))); | |
246 | - | |
247 | - if Icon > 0 then | |
248 | - begin | |
249 | - AControl.Hint := AControl.Hint + '|' + IntToStr(Icon); | |
250 | - DestroyIcon(Icon); | |
251 | - end; | |
252 | - | |
253 | - TControlHack(AControl).OnMouseEnter := HandleMouseEnter; | |
254 | - TControlHack(AControl).OnMouseLeave := HandleMouseLeave; | |
255 | -end; | |
256 | - | |
257 | 109 | procedure TDamoPrincipal.PausePooling; |
258 | 110 | begin |
259 | 111 | FOnStepInfo.Pause; |
260 | 112 | end; |
261 | 113 | |
262 | -procedure TDamoPrincipal.ShowBalloonHint(AControl: TControl); | |
263 | -begin | |
264 | - // Remove o controle que já existe (se houver um) e atribui o novo controle. | |
265 | - // Isso é necessário porque o TKRKBalloonHint é concebido para servir a apenas | |
266 | - // um controle de cada vez e ser configurado completamente via Object | |
267 | - // Inspector. Esse é o mesmo motivo pelo qual eu também desativo e ativo a | |
268 | - // propriedade AutoGetTexts e altero a posição TipAlignmente para algo | |
269 | - // diferente de taCenter | |
270 | - KRBHPrincipal.AssociatedControl := nil; | |
271 | - KRBHPrincipal.AssociatedControl := AControl; | |
272 | - KRBHPrincipal.AutoGetTexts := False; | |
273 | - KRBHPrincipal.AutoGetTexts := True; | |
274 | - KRBHPrincipal.TipAlignment := taTopLeft; | |
275 | - KRBHPrincipal.Show(taCenter); | |
276 | -end; | |
277 | - | |
278 | 114 | procedure TDamoPrincipal.ShowFrame(AFrameClass: TFramBasicoClass; AAction: TAction); |
279 | 115 | var |
280 | 116 | Frame: TFramBasico; |
@@ -25,27 +25,16 @@ | ||
25 | 25 | LABEOnStepIdentification: TLabel; |
26 | 26 | LABEOnStepStatus: TLabel; |
27 | 27 | IMAGAtHome: TImage; |
28 | - PANEStatus: TPanel; | |
28 | + PANEStatus: TKRKPanel; | |
29 | 29 | IMAGParked: TImage; |
30 | 30 | IMAGTracking: TImage; |
31 | 31 | IMAGGoTo: TImage; |
32 | - BUTNToggleToolTip: TButton; | |
33 | - BUTN: TButton; | |
34 | - BUTN3: TButton; | |
35 | - BUTN4: TButton; | |
36 | - BUTN5: TButton; | |
37 | 32 | procedure ACTNLocaisDeObservacaoExecute(Sender: TObject); |
38 | - procedure FormShow(Sender: TObject); | |
39 | 33 | procedure FormCreate(Sender: TObject); |
40 | - procedure BUTNToggleToolTipClick(Sender: TObject); | |
41 | - procedure BUTNClick(Sender: TObject); | |
42 | - procedure BUTN3Click(Sender: TObject); | |
43 | - procedure BUTN4Click(Sender: TObject); | |
44 | - procedure BUTN5Click(Sender: TObject); | |
34 | + function KRKFormTTNShow(ANMHdr: tagNMHDR): Boolean; | |
45 | 35 | private |
46 | 36 | { Private declarations } |
47 | 37 | FDamoPrincipal: TDamoPrincipal; |
48 | - procedure HandleNotifyMessages(var AMessage: TWMNotify); message WM_NOTIFY; | |
49 | 38 | public |
50 | 39 | { Public declarations } |
51 | 40 | constructor Create(AOwner: TComponent); override; |
@@ -59,7 +48,7 @@ | ||
59 | 48 | {$R *.dfm} |
60 | 49 | |
61 | 50 | uses |
62 | - UFramLocaisDeObservacao, CommCtrl, KRK.Rtl.Win.CommCtrl; | |
51 | + UFramLocaisDeObservacao, UClassesAjudantes, KRK.Rtl.Win.CommCtrl; | |
63 | 52 | |
64 | 53 | { TFormPrincipal } |
65 | 54 |
@@ -68,70 +57,6 @@ | ||
68 | 57 | FDamoPrincipal.ShowFrame(TFramLocaisDeObservacao,TAction(Sender)); |
69 | 58 | end; |
70 | 59 | |
71 | -//var | |
72 | -// v1, v11, v2, v22: Boolean; | |
73 | - | |
74 | -procedure TKRFMPrincipal.BUTN3Click(Sender: TObject); | |
75 | -begin | |
76 | -// if v11 then | |
77 | -// begin | |
78 | -// FDamoPrincipal.h11; | |
79 | -// v11 := False; | |
80 | -// end | |
81 | -// else | |
82 | -// begin | |
83 | -// FDamoPrincipal.s11; | |
84 | -// v11 := True; | |
85 | -// end; | |
86 | -end; | |
87 | - | |
88 | -procedure TKRFMPrincipal.BUTN4Click(Sender: TObject); | |
89 | -begin | |
90 | -// if v22 then | |
91 | -// begin | |
92 | -// FDamoPrincipal.h22; | |
93 | -// v22 := False; | |
94 | -// end | |
95 | -// else | |
96 | -// begin | |
97 | -// FDamoPrincipal.s22; | |
98 | -// v22 := True; | |
99 | -// end; | |
100 | -end; | |
101 | - | |
102 | -procedure TKRFMPrincipal.BUTN5Click(Sender: TObject); | |
103 | -begin | |
104 | - FDamoPrincipal.MSG; | |
105 | -end; | |
106 | - | |
107 | -procedure TKRFMPrincipal.BUTNClick(Sender: TObject); | |
108 | -begin | |
109 | -// if v2 then | |
110 | -// begin | |
111 | -// FDamoPrincipal.h2; | |
112 | -// v2 := False; | |
113 | -// end | |
114 | -// else | |
115 | -// begin | |
116 | -// FDamoPrincipal.s2; | |
117 | -// v2 := True; | |
118 | -// end; | |
119 | -end; | |
120 | - | |
121 | -procedure TKRFMPrincipal.BUTNToggleToolTipClick(Sender: TObject); | |
122 | -begin | |
123 | -// if v1 then | |
124 | -// begin | |
125 | -// FDamoPrincipal.h1; | |
126 | -// v1 := False; | |
127 | -// end | |
128 | -// else | |
129 | -// begin | |
130 | -// FDamoPrincipal.s1; | |
131 | -// v1 := True; | |
132 | -// end; | |
133 | -end; | |
134 | - | |
135 | 60 | constructor TKRFMPrincipal.Create(AOwner: TComponent); |
136 | 61 | begin |
137 | 62 | // Anteriormente eu criva FDamoPrincipal antes de inherited, porque eu |
@@ -141,7 +66,7 @@ | ||
141 | 66 | // executado APÓS a finalização total do construtor, portanto, não importa |
142 | 67 | // neste caso onde se cria FDamoPrincipal, pois no evento OnCreate ele estará |
143 | 68 | // disponível com certeza! Com isso em mente eu acredito que dificilmente |
144 | - // alguma implementação deva de fato criar coisas antes do Inherited. Aqui | |
69 | + // alguma implementação deva de fato criar coisas antes do inherited. Aqui | |
145 | 70 | // mesmo, fazer isso estava causando a limpeza do membro FToolInfo.lpszText |
146 | 71 | // (em TKRKBalloonHint) e eu não sei porque isso aconteceu, pois não faz muito |
147 | 72 | // sentido. Como a mudança de criação de FDamoPrincipal para depois de |
@@ -153,29 +78,20 @@ | ||
153 | 78 | |
154 | 79 | procedure TKRFMPrincipal.FormCreate(Sender: TObject); |
155 | 80 | begin |
156 | - FDamoPrincipal.ConfigureBalloonHint(IMAGAtHome); | |
157 | - FDamoPrincipal.ConfigureBalloonHint(IMAGGoTo); | |
158 | - FDamoPrincipal.ConfigureBalloonHint(IMAGParked); | |
159 | - FDamoPrincipal.ConfigureBalloonHint(IMAGTracking); | |
81 | + FDamoPrincipal.KRTT.RegisterToolTips; | |
160 | 82 | end; |
161 | 83 | |
162 | -procedure TKRFMPrincipal.FormShow(Sender: TObject); | |
84 | +function TKRFMPrincipal.KRKFormTTNShow(ANMHdr: tagNMHDR): Boolean; | |
163 | 85 | begin |
164 | -// FDamoPrincipal.StartPooling; | |
165 | -// comitar o krakatoa depois de incluir nele a opção de uso do wordwrap | |
166 | -// nao esquecer de comentar que caso algo errado aconteça, que basta reverter os fontes para uma versão anterior | |
167 | -end; | |
86 | + Result := False; | |
168 | 87 | |
169 | -procedure TKRFMPrincipal.HandleNotifyMessages(var AMessage: TWMNotify); | |
170 | -var | |
171 | - Link: TNMLink; | |
172 | -begin | |
173 | - if Assigned(AMessage.NMHdr) and (AMessage.NMHdr.code = TTN_LINKCLICK) then | |
174 | - begin | |
175 | - Link := PNMLink(AMessage.NMHdr)^; | |
176 | - | |
177 | - Application.MessageBox(PChar('O link clicado tem href="' + Link.item.szUrl + '" e id="' + Link.item.szID + '" e seu índice é "' + Link.item.iLink.ToString + '"'),'Sou foda!',MB_ICONINFORMATION); | |
178 | - end; | |
88 | + for var ToolTip: TToolTip in FDamoPrincipal.KRTT.ToolTips do | |
89 | + if ToolTip.Id = ANMHdr.idFrom then | |
90 | + begin | |
91 | + FDamoPrincipal.KRTT.SetTipIconAndTitle(FDamoPrincipal.KRTT.IconResourceId2IconHandle(PChar(ToolTip.Tool.Name)) | |
92 | + ,PChar(GetShortHint(ToolTip.Tool.Hint))); | |
93 | + Break; | |
94 | + end; | |
179 | 95 | end; |
180 | 96 | |
181 | 97 | initialization |