added gitignore
[rofl0r-TntUnicode.git] / Source / TntGrids.pas
blob8096cd445b4c499bd6d57dc883372b04a42033f4
2 {*****************************************************************************}
3 { }
4 { Tnt Delphi Unicode Controls }
5 { http://www.tntware.com/delphicontrols/unicode/ }
6 { Version: 2.3.0 }
7 { }
8 { Copyright (c) 2002-2007, Troy Wolbrink (troy.wolbrink@tntware.com) }
9 { }
10 {*****************************************************************************}
12 unit TntGrids;
14 {$INCLUDE TntCompilers.inc}
16 interface
18 uses
19 Classes, TntClasses, Grids, Windows, Controls, Messages;
21 type
22 {TNT-WARN TInplaceEdit}
23 TTntInplaceEdit = class(TInplaceEdit{TNT-ALLOW TInplaceEdit})
24 private
25 function GetText: WideString;
26 procedure SetText(const Value: WideString);
27 protected
28 procedure UpdateContents; override;
29 procedure CreateWindowHandle(const Params: TCreateParams); override;
30 public
31 property Text: WideString read GetText write SetText;
32 end;
34 TTntGetEditEvent = procedure (Sender: TObject; ACol, ARow: Longint; var Value: WideString) of object;
35 TTntSetEditEvent = procedure (Sender: TObject; ACol, ARow: Longint; const Value: WideString) of object;
37 {TNT-WARN TCustomDrawGrid}
38 _TTntInternalCustomDrawGrid = class(TCustomDrawGrid{TNT-ALLOW TCustomDrawGrid})
39 private
40 FSettingEditText: Boolean;
41 procedure InternalSetEditText(ACol, ARow: Longint; const Value: string{TNT-ALLOW string}); dynamic; abstract;
42 protected
43 procedure SetEditText(ACol, ARow: Longint; const Value: string{TNT-ALLOW string}); override;
44 end;
46 TTntCustomDrawGrid = class(_TTntInternalCustomDrawGrid)
47 private
48 FOnGetEditText: TTntGetEditEvent;
49 FOnSetEditText: TTntSetEditEvent;
50 function GetHint: WideString;
51 procedure SetHint(const Value: WideString);
52 function IsHintStored: Boolean;
53 procedure WMChar(var Msg: TWMChar); message WM_CHAR;
54 protected
55 function CreateEditor: TInplaceEdit{TNT-ALLOW TInplaceEdit}; override;
56 procedure InternalSetEditText(ACol, ARow: Longint; const Value: string{TNT-ALLOW string}); override;
57 function GetEditText(ACol, ARow: Longint): WideString; reintroduce; virtual;
58 procedure SetEditText(ACol, ARow: Longint; const Value: WideString); reintroduce; virtual;
59 protected
60 procedure CreateWindowHandle(const Params: TCreateParams); override;
61 procedure ShowEditorChar(Ch: WideChar); dynamic;
62 procedure DefineProperties(Filer: TFiler); override;
63 function GetActionLinkClass: TControlActionLinkClass; override;
64 procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
65 property OnGetEditText: TTntGetEditEvent read FOnGetEditText write FOnGetEditText;
66 property OnSetEditText: TTntSetEditEvent read FOnSetEditText write FOnSetEditText;
67 published
68 property Hint: WideString read GetHint write SetHint stored IsHintStored;
69 end;
71 {TNT-WARN TDrawGrid}
72 TTntDrawGrid = class(TTntCustomDrawGrid)
73 published
74 property Align;
75 property Anchors;
76 property BevelEdges;
77 property BevelInner;
78 property BevelKind;
79 property BevelOuter;
80 property BevelWidth;
81 property BiDiMode;
82 property BorderStyle;
83 property Color;
84 property ColCount;
85 property Constraints;
86 property Ctl3D;
87 property DefaultColWidth;
88 property DefaultRowHeight;
89 property DefaultDrawing;
90 property DragCursor;
91 property DragKind;
92 property DragMode;
93 property Enabled;
94 property FixedColor;
95 property FixedCols;
96 property RowCount;
97 property FixedRows;
98 property Font;
99 property GridLineWidth;
100 property Options;
101 property ParentBiDiMode;
102 property ParentColor;
103 property ParentCtl3D;
104 property ParentFont;
105 property ParentShowHint;
106 property PopupMenu;
107 property ScrollBars;
108 property ShowHint;
109 property TabOrder;
110 property Visible;
111 property VisibleColCount;
112 property VisibleRowCount;
113 property OnClick;
114 property OnColumnMoved;
115 property OnContextPopup;
116 property OnDblClick;
117 property OnDragDrop;
118 property OnDragOver;
119 property OnDrawCell;
120 property OnEndDock;
121 property OnEndDrag;
122 property OnEnter;
123 property OnExit;
124 property OnGetEditMask;
125 property OnGetEditText;
126 property OnKeyDown;
127 property OnKeyPress;
128 property OnKeyUp;
129 {$IFDEF COMPILER_9_UP}
130 property OnMouseActivate;
131 {$ENDIF}
132 property OnMouseDown;
133 {$IFDEF COMPILER_10_UP}
134 property OnMouseEnter;
135 property OnMouseLeave;
136 {$ENDIF}
137 property OnMouseMove;
138 property OnMouseUp;
139 property OnMouseWheelDown;
140 property OnMouseWheelUp;
141 property OnRowMoved;
142 property OnSelectCell;
143 property OnSetEditText;
144 property OnStartDock;
145 property OnStartDrag;
146 property OnTopLeftChanged;
147 end;
149 TTntStringGrid = class;
151 {TNT-WARN TStringGridStrings}
152 TTntStringGridStrings = class(TTntStrings)
153 private
154 FIsCol: Boolean;
155 FColRowIndex: Integer;
156 FGrid: TTntStringGrid;
157 function GridAnsiStrings: TStrings{TNT-ALLOW TStrings};
158 protected
159 function Get(Index: Integer): WideString; override;
160 procedure Put(Index: Integer; const S: WideString); override;
161 function GetCount: Integer; override;
162 function GetObject(Index: Integer): TObject; override;
163 procedure PutObject(Index: Integer; AObject: TObject); override;
164 procedure SetUpdateState(Updating: Boolean); override;
165 public
166 constructor Create(AGrid: TTntStringGrid; AIndex: Longint);
167 function Add(const S: WideString): Integer; override;
168 procedure Assign(Source: TPersistent); override;
169 procedure Clear; override;
170 procedure Delete(Index: Integer); override;
171 procedure Insert(Index: Integer; const S: WideString); override;
172 end;
174 {TNT-WARN TStringGrid}
175 _TTntInternalStringGrid = class(TStringGrid{TNT-ALLOW TStringGrid})
176 private
177 FSettingEditText: Boolean;
178 procedure InternalSetEditText(ACol, ARow: Longint; const Value: string{TNT-ALLOW string}); dynamic; abstract;
179 protected
180 procedure SetEditText(ACol, ARow: Longint; const Value: string{TNT-ALLOW string}); override;
181 end;
183 TTntStringGrid = class(_TTntInternalStringGrid)
184 private
185 FCreatedRowStrings: TStringList{TNT-ALLOW TStringList};
186 FCreatedColStrings: TStringList{TNT-ALLOW TStringList};
187 FOnGetEditText: TTntGetEditEvent;
188 FOnSetEditText: TTntSetEditEvent;
189 function GetHint: WideString;
190 procedure SetHint(const Value: WideString);
191 function IsHintStored: Boolean;
192 procedure WMChar(var Msg: TWMChar); message WM_CHAR;
193 function GetCells(ACol, ARow: Integer): WideString;
194 procedure SetCells(ACol, ARow: Integer; const Value: WideString);
195 function FindGridStrings(const IsCol: Boolean; const ListIndex: Integer): TTntStrings;
196 function GetCols(Index: Integer): TTntStrings;
197 function GetRows(Index: Integer): TTntStrings;
198 procedure SetCols(Index: Integer; const Value: TTntStrings);
199 procedure SetRows(Index: Integer; const Value: TTntStrings);
200 protected
201 function CreateEditor: TInplaceEdit{TNT-ALLOW TInplaceEdit}; override;
202 procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
203 procedure InternalSetEditText(ACol, ARow: Longint; const Value: string{TNT-ALLOW string}); override;
204 function GetEditText(ACol, ARow: Longint): WideString; reintroduce; virtual;
205 procedure SetEditText(ACol, ARow: Longint; const Value: WideString); reintroduce; virtual;
206 protected
207 procedure CreateWindowHandle(const Params: TCreateParams); override;
208 procedure ShowEditorChar(Ch: WideChar); dynamic;
209 procedure DefineProperties(Filer: TFiler); override;
210 function GetActionLinkClass: TControlActionLinkClass; override;
211 procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
212 public
213 constructor Create(AOwner: TComponent); override;
214 destructor Destroy; override;
215 property Cells[ACol, ARow: Integer]: WideString read GetCells write SetCells;
216 property Cols[Index: Integer]: TTntStrings read GetCols write SetCols;
217 property Rows[Index: Integer]: TTntStrings read GetRows write SetRows;
218 published
219 property Hint: WideString read GetHint write SetHint stored IsHintStored;
220 property OnGetEditText: TTntGetEditEvent read FOnGetEditText write FOnGetEditText;
221 property OnSetEditText: TTntSetEditEvent read FOnSetEditText write FOnSetEditText;
222 end;
224 implementation
226 uses
227 SysUtils, TntSystem, TntGraphics, TntControls, TntStdCtrls, TntActnList, TntSysUtils;
229 { TBinaryCompareAnsiStringList }
230 type
231 TBinaryCompareAnsiStringList = class(TStringList{TNT-ALLOW TStringList})
232 protected
233 function CompareStrings(const S1, S2: string{TNT-ALLOW string}): Integer; override;
234 end;
236 function TBinaryCompareAnsiStringList.CompareStrings(const S1, S2: string{TNT-ALLOW string}): Integer;
237 begin
238 // must compare strings via binary for speed
239 if S1 = S2 then
240 result := 0
241 else if S1 < S2 then
242 result := -1
243 else
244 result := 1;
245 end;
247 { TTntInplaceEdit }
249 procedure TTntInplaceEdit.CreateWindowHandle(const Params: TCreateParams);
250 begin
251 TntCustomEdit_CreateWindowHandle(Self, Params);
252 end;
254 function TTntInplaceEdit.GetText: WideString;
255 begin
256 if IsMasked then
257 Result := inherited Text
258 else
259 Result := TntControl_GetText(Self);
260 end;
262 procedure TTntInplaceEdit.SetText(const Value: WideString);
263 begin
264 if IsMasked then
265 inherited Text := Value
266 else
267 TntControl_SetText(Self, Value);
268 end;
270 type TAccessCustomGrid = class(TCustomGrid);
272 procedure TTntInplaceEdit.UpdateContents;
273 begin
274 Text := '';
275 with TAccessCustomGrid(Grid) do
276 Self.EditMask := GetEditMask(Col, Row);
277 if (Grid is TTntStringGrid) then
278 with (Grid as TTntStringGrid) do
279 Self.Text := GetEditText(Col, Row)
280 else if (Grid is TTntCustomDrawGrid) then
281 with (Grid as TTntCustomDrawGrid) do
282 Self.Text := GetEditText(Col, Row)
283 else
284 with TAccessCustomGrid(Grid) do
285 Self.Text := GetEditText(Col, Row);
286 with TAccessCustomGrid(Grid) do
287 Self.MaxLength := GetEditLimit;
288 end;
290 { _TTntInternalCustomDrawGrid }
292 procedure _TTntInternalCustomDrawGrid.SetEditText(ACol, ARow: Integer; const Value: string{TNT-ALLOW string});
293 begin
294 if FSettingEditText then
295 inherited
296 else
297 InternalSetEditText(ACol, ARow, Value);
298 end;
301 { TTntCustomDrawGrid }
303 function TTntCustomDrawGrid.CreateEditor: TInplaceEdit{TNT-ALLOW TInplaceEdit};
304 begin
305 Result := TTntInplaceEdit.Create(Self);
306 end;
308 procedure TTntCustomDrawGrid.CreateWindowHandle(const Params: TCreateParams);
309 begin
310 CreateUnicodeHandle(Self, Params, '');
311 end;
313 procedure TTntCustomDrawGrid.DefineProperties(Filer: TFiler);
314 begin
315 inherited;
316 TntPersistent_AfterInherited_DefineProperties(Filer, Self);
317 end;
319 function TTntCustomDrawGrid.IsHintStored: Boolean;
320 begin
321 Result := TntControl_IsHintStored(Self);
322 end;
324 function TTntCustomDrawGrid.GetHint: WideString;
325 begin
326 Result := TntControl_GetHint(Self);
327 end;
329 procedure TTntCustomDrawGrid.SetHint(const Value: WideString);
330 begin
331 TntControl_SetHint(Self, Value);
332 end;
334 function TTntCustomDrawGrid.GetEditText(ACol, ARow: Integer): WideString;
335 begin
336 Result := '';
337 if Assigned(FOnGetEditText) then FOnGetEditText(Self, ACol, ARow, Result);
338 end;
340 procedure TTntCustomDrawGrid.InternalSetEditText(ACol, ARow: Integer; const Value: string{TNT-ALLOW string});
341 begin
342 if not FSettingEditText then
343 SetEditText(ACol, ARow, TntControl_GetText(InplaceEditor));
344 end;
346 procedure TTntCustomDrawGrid.SetEditText(ACol, ARow: Integer; const Value: WideString);
347 begin
348 if Assigned(FOnSetEditText) then FOnSetEditText(Self, ACol, ARow, Value);
349 end;
351 procedure TTntCustomDrawGrid.WMChar(var Msg: TWMChar);
352 begin
353 if (goEditing in Options)
354 and (AnsiChar(Msg.CharCode) in [^H, #32..#255]) then begin
355 RestoreWMCharMsg(TMessage(Msg));
356 ShowEditorChar(WideChar(Msg.CharCode));
357 end else
358 inherited;
359 end;
361 procedure TTntCustomDrawGrid.ShowEditorChar(Ch: WideChar);
362 begin
363 ShowEditor;
364 if InplaceEditor <> nil then begin
365 if Win32PlatformIsUnicode then
366 PostMessageW(InplaceEditor.Handle, WM_CHAR, Word(Ch), 0)
367 else
368 PostMessageA(InplaceEditor.Handle, WM_CHAR, Word(Ch), 0);
369 end;
370 end;
372 procedure TTntCustomDrawGrid.ActionChange(Sender: TObject; CheckDefaults: Boolean);
373 begin
374 TntControl_BeforeInherited_ActionChange(Self, Sender, CheckDefaults);
375 inherited;
376 end;
378 function TTntCustomDrawGrid.GetActionLinkClass: TControlActionLinkClass;
379 begin
380 Result := TntControl_GetActionLinkClass(Self, inherited GetActionLinkClass);
381 end;
383 { TTntStringGridStrings }
385 procedure TTntStringGridStrings.Assign(Source: TPersistent);
387 UTF8Strings: TStringList{TNT-ALLOW TStringList};
388 i: integer;
389 begin
390 UTF8Strings := TStringList{TNT-ALLOW TStringList}.Create;
392 if Source is TStrings{TNT-ALLOW TStrings} then begin
393 for i := 0 to TStrings{TNT-ALLOW TStrings}(Source).Count - 1 do
394 UTF8Strings.AddObject(WideStringToUTF8(WideString(TStrings{TNT-ALLOW TStrings}(Source).Strings[i])),
395 TStrings{TNT-ALLOW TStrings}(Source).Objects[i]);
396 GridAnsiStrings.Assign(UTF8Strings);
397 end else if Source is TTntStrings then begin
398 for i := 0 to TTntStrings(Source).Count - 1 do
399 UTF8Strings.AddObject(WideStringToUTF8(TTntStrings(Source).Strings[i]),
400 TTntStrings(Source).Objects[i]);
401 GridAnsiStrings.Assign(UTF8Strings);
402 end else
403 GridAnsiStrings.Assign(Source);
404 finally
405 UTF8Strings.Free;
406 end;
407 end;
409 function TTntStringGridStrings.GridAnsiStrings: TStrings{TNT-ALLOW TStrings};
410 begin
411 Assert(Assigned(FGrid));
412 if FIsCol then
413 Result := TStringGrid{TNT-ALLOW TStringGrid}(FGrid).Cols[FColRowIndex]
414 else
415 Result := TStringGrid{TNT-ALLOW TStringGrid}(FGrid).Rows[FColRowIndex];
416 end;
418 procedure TTntStringGridStrings.Clear;
419 begin
420 GridAnsiStrings.Clear;
421 end;
423 procedure TTntStringGridStrings.Delete(Index: Integer);
424 begin
425 GridAnsiStrings.Delete(Index);
426 end;
428 function TTntStringGridStrings.GetCount: Integer;
429 begin
430 Result := GridAnsiStrings.Count;
431 end;
433 function TTntStringGridStrings.Get(Index: Integer): WideString;
434 begin
435 Result := UTF8ToWideString(GridAnsiStrings[Index]);
436 end;
438 procedure TTntStringGridStrings.Put(Index: Integer; const S: WideString);
439 begin
440 GridAnsiStrings[Index] := WideStringToUTF8(S);
441 end;
443 procedure TTntStringGridStrings.Insert(Index: Integer; const S: WideString);
444 begin
445 GridAnsiStrings.Insert(Index, WideStringToUTF8(S));
446 end;
448 function TTntStringGridStrings.Add(const S: WideString): Integer;
449 begin
450 Result := GridAnsiStrings.Add(WideStringToUTF8(S));
451 end;
453 function TTntStringGridStrings.GetObject(Index: Integer): TObject;
454 begin
455 Result := GridAnsiStrings.Objects[Index];
456 end;
458 procedure TTntStringGridStrings.PutObject(Index: Integer; AObject: TObject);
459 begin
460 GridAnsiStrings.Objects[Index] := AObject;
461 end;
463 type TAccessStrings = class(TStrings{TNT-ALLOW TStrings});
465 procedure TTntStringGridStrings.SetUpdateState(Updating: Boolean);
466 begin
467 TAccessStrings(GridAnsiStrings).SetUpdateState(Updating);
468 end;
470 constructor TTntStringGridStrings.Create(AGrid: TTntStringGrid; AIndex: Integer);
471 begin
472 inherited Create;
473 FGrid := AGrid;
474 if AIndex > 0 then begin
475 FIsCol := False;
476 FColRowIndex := AIndex - 1;
477 end else begin
478 FIsCol := True;
479 FColRowIndex := -AIndex - 1;
480 end;
481 end;
483 { _TTntInternalStringGrid }
485 procedure _TTntInternalStringGrid.SetEditText(ACol, ARow: Integer; const Value: string{TNT-ALLOW string});
486 begin
487 if FSettingEditText then
488 inherited
489 else
490 InternalSetEditText(ACol, ARow, Value);
491 end;
493 { TTntStringGrid }
495 constructor TTntStringGrid.Create(AOwner: TComponent);
496 begin
497 inherited;
498 FCreatedRowStrings := TBinaryCompareAnsiStringList.Create;
499 FCreatedRowStrings.Sorted := True;
500 FCreatedRowStrings.Duplicates := dupError;
501 FCreatedColStrings := TBinaryCompareAnsiStringList.Create;
502 FCreatedColStrings.Sorted := True;
503 FCreatedColStrings.Duplicates := dupError;
504 end;
506 destructor TTntStringGrid.Destroy;
508 i: integer;
509 begin
510 for i := FCreatedColStrings.Count - 1 downto 0 do
511 FCreatedColStrings.Objects[i].Free;
512 for i := FCreatedRowStrings.Count - 1 downto 0 do
513 FCreatedRowStrings.Objects[i].Free;
514 FreeAndNil(FCreatedColStrings);
515 FreeAndNil(FCreatedRowStrings);
516 inherited;
517 end;
519 function TTntStringGrid.CreateEditor: TInplaceEdit{TNT-ALLOW TInplaceEdit};
520 begin
521 Result := TTntInplaceEdit.Create(Self);
522 end;
524 procedure TTntStringGrid.CreateWindowHandle(const Params: TCreateParams);
525 begin
526 CreateUnicodeHandle(Self, Params, '');
527 end;
529 procedure TTntStringGrid.DefineProperties(Filer: TFiler);
530 begin
531 inherited;
532 TntPersistent_AfterInherited_DefineProperties(Filer, Self);
533 end;
535 function TTntStringGrid.IsHintStored: Boolean;
536 begin
537 Result := TntControl_IsHintStored(Self);
538 end;
540 function TTntStringGrid.GetHint: WideString;
541 begin
542 Result := TntControl_GetHint(Self)
543 end;
545 procedure TTntStringGrid.SetHint(const Value: WideString);
546 begin
547 TntControl_SetHint(Self, Value);
548 end;
550 function TTntStringGrid.GetCells(ACol, ARow: Integer): WideString;
551 begin
552 Result := UTF8ToWideString(inherited Cells[ACol, ARow])
553 end;
555 procedure TTntStringGrid.SetCells(ACol, ARow: Integer; const Value: WideString);
557 UTF8Str: AnsiString;
558 begin
559 UTF8Str := WideStringToUTF8(Value);
560 if inherited Cells[ACol, ARow] <> UTF8Str then
561 inherited Cells[ACol, ARow] := UTF8Str;
562 end;
564 function TTntStringGrid.FindGridStrings(const IsCol: Boolean; const ListIndex: Integer): TTntStrings;
566 idx: integer;
567 SrcStrings: TStrings{TNT-ALLOW TStrings};
568 RCIndex: Integer;
569 begin
570 if IsCol then
571 SrcStrings := FCreatedColStrings
572 else
573 SrcStrings := FCreatedRowStrings;
574 Assert(Assigned(SrcStrings));
575 idx := SrcStrings.IndexOf(IntToStr(ListIndex));
576 if idx <> -1 then
577 Result := SrcStrings.Objects[idx] as TTntStrings
578 else begin
579 if IsCol then RCIndex := -ListIndex - 1 else RCIndex := ListIndex + 1;
580 Result := TTntStringGridStrings.Create(Self, RCIndex);
581 SrcStrings.AddObject(IntToStr(ListIndex), Result);
582 end;
583 end;
585 function TTntStringGrid.GetCols(Index: Integer): TTntStrings;
586 begin
587 Result := FindGridStrings(True, Index);
588 end;
590 function TTntStringGrid.GetRows(Index: Integer): TTntStrings;
591 begin
592 Result := FindGridStrings(False, Index);
593 end;
595 procedure TTntStringGrid.SetCols(Index: Integer; const Value: TTntStrings);
596 begin
597 FindGridStrings(True, Index).Assign(Value);
598 end;
600 procedure TTntStringGrid.SetRows(Index: Integer; const Value: TTntStrings);
601 begin
602 FindGridStrings(False, Index).Assign(Value);
603 end;
605 procedure TTntStringGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState);
607 SaveDefaultDrawing: Boolean;
608 begin
609 if DefaultDrawing then
610 WideCanvasTextRect(Canvas, ARect, ARect.Left+2, ARect.Top+2, Cells[ACol, ARow]);
611 SaveDefaultDrawing := DefaultDrawing;
613 DefaultDrawing := False;
614 inherited DrawCell(ACol, ARow, ARect, AState);
615 finally
616 DefaultDrawing := SaveDefaultDrawing;
617 end;
618 end;
620 function TTntStringGrid.GetEditText(ACol, ARow: Integer): WideString;
621 begin
622 Result := Cells[ACol, ARow];
623 if Assigned(FOnGetEditText) then FOnGetEditText(Self, ACol, ARow, Result);
624 end;
626 procedure TTntStringGrid.InternalSetEditText(ACol, ARow: Integer; const Value: string{TNT-ALLOW string});
627 begin
628 if not FSettingEditText then
629 SetEditText(ACol, ARow, TntControl_GetText(InplaceEditor));
630 end;
632 procedure TTntStringGrid.SetEditText(ACol, ARow: Integer; const Value: WideString);
633 begin
634 FSettingEditText := True;
636 inherited SetEditText(ACol, ARow, WideStringToUTF8(Value));
637 finally
638 FSettingEditText := False;
639 end;
640 if Assigned(FOnSetEditText) then FOnSetEditText(Self, ACol, ARow, Value);
641 end;
643 procedure TTntStringGrid.WMChar(var Msg: TWMChar);
644 begin
645 if (goEditing in Options)
646 and (AnsiChar(Msg.CharCode) in [^H, #32..#255]) then begin
647 RestoreWMCharMsg(TMessage(Msg));
648 ShowEditorChar(WideChar(Msg.CharCode));
649 end else
650 inherited;
651 end;
653 procedure TTntStringGrid.ShowEditorChar(Ch: WideChar);
654 begin
655 ShowEditor;
656 if InplaceEditor <> nil then begin
657 if Win32PlatformIsUnicode then
658 PostMessageW(InplaceEditor.Handle, WM_CHAR, Word(Ch), 0)
659 else
660 PostMessageA(InplaceEditor.Handle, WM_CHAR, Word(Ch), 0);
661 end;
662 end;
664 procedure TTntStringGrid.ActionChange(Sender: TObject; CheckDefaults: Boolean);
665 begin
666 TntControl_BeforeInherited_ActionChange(Self, Sender, CheckDefaults);
667 inherited;
668 end;
670 function TTntStringGrid.GetActionLinkClass: TControlActionLinkClass;
671 begin
672 Result := TntControl_GetActionLinkClass(Self, inherited GetActionLinkClass);
673 end;
675 end.