Skip to content

Commit af3c342

Browse files
2 parents 6163efb + 84468b1 commit af3c342

File tree

1 file changed

+139
-1
lines changed

1 file changed

+139
-1
lines changed

Source/Vcl.LabeledDBCtrls.pas

Lines changed: 139 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ TLabeledDbGrid = class;
297297
TCBCheckBoxedColumnEvent = procedure (Column: TColumn; var IsCheckBoxedColumn: Boolean) of object;
298298
TColumnNotifyEvent = procedure (Column: TColumn) of object;
299299

300+
TGridIncrementalSearchType = (stBeginsWith, stFilterBy);
301+
300302
TLabeledDbGrid = class(TDBGrid)
301303
private
302304
FBoundLabel: TControlBoundLabel;
@@ -320,6 +322,9 @@ TLabeledDbGrid = class(TDBGrid)
320322
FLinesPerRow: Integer;
321323
FRowMargin: Integer;
322324
FWrapAllText: Boolean;
325+
FColMoving: Boolean;
326+
FTitleMouseDown: boolean;
327+
FIncrementalSearchType: TGridIncrementalSearchType;
323328
function TitleOffset: Integer;
324329
procedure OnSearchTimer(Sender : TObject);
325330
procedure SetBoundCaption(const Value: TCaption);
@@ -344,6 +349,7 @@ TLabeledDbGrid = class(TDBGrid)
344349
function isCheckBoxedField(Field: TField): boolean;
345350
function isUnsortableField(Field: TField): boolean;
346351
procedure doIncrementalLocate;
352+
procedure doIncrementalFilter;
347353
procedure SetIncrementalSearchDelay(const Value: integer);
348354
function GetIncrementalSearchDelay: integer;
349355
procedure SetDrawCheckBoxImages(const Value: Boolean);
@@ -358,6 +364,7 @@ TLabeledDbGrid = class(TDBGrid)
358364
const AField: TField; Const AColumn: TColumn);
359365
function CalcRowMargin(const ARect: TRect): Integer;
360366
procedure SetWrapAllText(const Value: Boolean);
367+
procedure SetColMoving(const Value: Boolean);
361368
protected
362369
procedure SetParent(AParent: TWinControl); override;
363370
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
@@ -379,12 +386,17 @@ TLabeledDbGrid = class(TDBGrid)
379386
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
380387
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
381388
X, Y: Integer); override;
389+
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); override;
390+
382391
function GetBorderStyle: TBorderStyle;
383392
{$IF DEFINE DXE8+}
384393
procedure ChangeScale(M, D: Integer; isDpiChange: Boolean); override;
385394
{$ELSE}
386395
procedure ChangeScale(M, D: Integer); override;
387396
{$ENDIF}
397+
398+
function CreateColumns: TDBGridColumns; override;
399+
388400
public
389401
procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
390402
Column: TColumn; State: TGridDrawState);
@@ -408,6 +420,8 @@ TLabeledDbGrid = class(TDBGrid)
408420
function ColumnIndexByFieldName(const AFieldName: string): Integer;
409421
function GetMouseOverField(X, Y: Integer): TField;
410422
function GetDefaultRowHeight: Integer;
423+
procedure ClearFilters;
424+
411425
published
412426
property TitleFont: TFont read GetTitleFont write SetTitleFont stored False;
413427
property IsEmpty: Boolean read GetIsEmpty;
@@ -431,6 +445,8 @@ TLabeledDbGrid = class(TDBGrid)
431445
property CanEditColumn: TCBCanEditColumn read FCanEditColumn write FCanEditColumn;
432446
property RowMargin: Integer read FRowMargin write SetRowMargin default 0;
433447
property WrapAllText: Boolean read FWrapAllText write SetWrapAllText default False;
448+
property ColMoving: Boolean read FColMoving write SetColMoving default True;
449+
property IncrementalSearchType: TGridIncrementalSearchType read FIncrementalSearchType write FIncrementalSearchType default stBeginsWith;
434450
end;
435451

436452
TNavInsMode = (imInsert, imAppend);
@@ -449,6 +465,14 @@ implementation
449465
DBActns, UxTheme, UITypes,
450466
//Labeled components
451467
Vcl.DbAwareLabeledUtils, Vcl.LabeledCtrls;
468+
469+
type
470+
TXColumn = class(TColumn)
471+
private
472+
FTitleCaption: string;
473+
public
474+
property TitleCaption: string read FTitleCaption write FTitleCaption;
475+
end;
452476

453477
var
454478
DbGridPrintSupport: TStringList;
@@ -1199,10 +1223,17 @@ constructor TLabeledDbGrid.Create(AOwner: TComponent);
11991223
FDrawCheckBoxImages := True;
12001224
FShowSortOrder := True;
12011225
FIncrementalSearch := False;
1226+
FIncrementalSearchType := stBeginsWith;
12021227
FSearchTimer := TTimer.Create(nil);
12031228
FSearchTimer.Interval := INCREMENTAL_DELAY_DEFAULT;
12041229
FSearchTimer.Enabled := False;
12051230
FSearchTimer.OnTimer := OnSearchTimer;
1231+
FColMoving := True;
1232+
end;
1233+
1234+
function TLabeledDbGrid.CreateColumns: TDBGridColumns;
1235+
begin
1236+
Result := TDBGridColumns.Create(Self, TXColumn)
12061237
end;
12071238

12081239
procedure TLabeledDbGrid.VisibleChanging;
@@ -1337,6 +1368,8 @@ procedure TLabeledDbGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGr
13371368
SortOrder: TCBSortOrder;
13381369
LRect: TRect;
13391370
LDataLinkActive: Boolean;
1371+
1372+
Text: string;
13401373
begin
13411374
dxGridSortedShapeMinWidth := ARect.Bottom - ARect.Top; //16
13421375
//se è il record corrente aggiorno il flag in modo tale che nell'evento
@@ -1351,6 +1384,26 @@ procedure TLabeledDbGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGr
13511384
FDrawingCurrentRecord := True
13521385
else
13531386
FDrawingCurrentRecord := False;
1387+
1388+
// artifizio per avere i puntini di sospensione anche in caso di troncatura del testo sul titolo
1389+
if not FTitleMouseDown and (gdFixed in AState) and (ACol > 0) and not(csDesigning in ComponentState) then
1390+
begin
1391+
DrawColumn := Columns[ACol];
1392+
Text := TXColumn(DrawColumn).TitleCaption;
1393+
1394+
if Text = '' then
1395+
begin
1396+
Text := DrawColumn.Title.Caption;
1397+
TXColumn(DrawColumn).TitleCaption := Text; // prima assegnazione della caption originale
1398+
end;
1399+
1400+
if (StrRicercaIncrementale <> '') and (SelectedIndex = ACol) then
1401+
Text := '[' + StrRicercaIncrementale + '] '+Text;
1402+
1403+
DrawColumn.Title.Caption := TruncStringInRect(Canvas, ARect, Text, 2) ;
1404+
end;
1405+
//--ale
1406+
13541407
finally
13551408
Inc(ACol, IndicatorOffset);
13561409
end;
@@ -1619,6 +1672,9 @@ procedure TLabeledDbGrid.SetOnBkCellColorAssign(const Value: TCBBkCellColorAssig
16191672
procedure TLabeledDbGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
16201673
Y: Integer);
16211674
begin
1675+
FTitleMouseDown := (Button = mbLeft) and (Shift = [ssLeft])
1676+
and isMouseOverTitleColumn(X,Y) and not Sizing(X,Y);
1677+
16221678
inherited;
16231679
if (Button = mbLeft) and (Shift = [ssLeft]) then
16241680
begin
@@ -2135,12 +2191,67 @@ procedure TLabeledDbGrid.doIncrementalSearch(Key: Char);
21352191
FSearchTimer.Enabled := True;
21362192
end;
21372193

2194+
procedure TLabeledDbGrid.doIncrementalFilter;
2195+
var
2196+
IntValue: Integer;
2197+
DateValue: TDateTime;
2198+
begin
2199+
FSearchTimer.Enabled := False;
2200+
2201+
if (DataSource = nil) or (Datasource.DataSet = nil) or (SelectedField = nil) then
2202+
Exit;
2203+
2204+
Datasource.DataSet.Filtered := False;
2205+
2206+
if StrRicercaIncrementale = '' then
2207+
Datasource.DataSet.Filter := ''
2208+
else
2209+
begin
2210+
Screen.Cursor := crHourGlass;
2211+
Try
2212+
if SelectedField.InheritsFrom(TNumericField) then
2213+
begin
2214+
if TryStrToInt(StrRicercaIncrementale, IntValue) then
2215+
Datasource.DataSet.Filter := SelectedField.FieldName + '='+ IntValue.ToString;
2216+
end
2217+
else if SelectedField.InheritsFrom(TDateField) then
2218+
begin
2219+
if TryStrToDateTime(StrRicercaIncrementale, DateValue) then
2220+
Datasource.DataSet.Filter := SelectedField.FieldName + '='+ QuotedStr(DateToStr(DateValue));
2221+
end
2222+
else if SelectedField.InheritsFrom(TDateTimeField) or SelectedField.InheritsFrom(TSQLTimeStampField) then
2223+
begin
2224+
if TryStrToDateTime(StrRicercaIncrementale, DateValue) then
2225+
Datasource.DataSet.Filter := SelectedField.FieldName + '>='+ QuotedStr(DateTimeToStr(DateValue));
2226+
end
2227+
else
2228+
Datasource.DataSet.Filter := SelectedField.FieldName+ ' like ' +QuotedStr('%'+StrRicercaIncrementale+'%');
2229+
2230+
Datasource.DataSet.Filtered := True;
2231+
Finally
2232+
Screen.Cursor := crDefault;
2233+
End;
2234+
end;
2235+
end;
2236+
2237+
procedure TLabeledDbGrid.ClearFilters;
2238+
begin
2239+
ChangeStrSearch('');
2240+
OnSearchTimer(self);
2241+
end;
2242+
2243+
2244+
21382245
procedure TLabeledDbGrid.doIncrementalLocate;
21392246
var
21402247
IntValue: Integer;
21412248
DateValue: TDateTime;
21422249
begin
21432250
FSearchTimer.Enabled := False;
2251+
2252+
if (DataSource = nil) or (Datasource.DataSet = nil) or (SelectedField = nil) then
2253+
Exit;
2254+
21442255
if StrRicercaIncrementale <> '' then
21452256
begin
21462257
Screen.Cursor := crHourGlass;
@@ -2308,6 +2419,13 @@ procedure TLabeledDbGrid.MouseMove(Shift: TShiftState; X, Y: Integer);
23082419
end;
23092420
end;
23102421

2422+
procedure TLabeledDbGrid.MouseUp(Button: TMouseButton; Shift: TShiftState;
2423+
X, Y: Integer);
2424+
begin
2425+
FTitleMouseDown := False;
2426+
inherited;
2427+
end;
2428+
23112429
procedure TLabeledDbGrid.SetCheckBoxedFields(const Value: string);
23122430
begin
23132431
if FCheckBoxedFields <> Value then
@@ -2318,7 +2436,10 @@ procedure TLabeledDbGrid.SetCheckBoxedFields(const Value: string);
23182436

23192437
procedure TLabeledDbGrid.OnSearchTimer(Sender: TObject);
23202438
begin
2321-
doIncrementalLocate;
2439+
case FIncrementalSearchType of
2440+
stBeginsWith: doIncrementalLocate;
2441+
stFilterBy : doIncrementalFilter;
2442+
end;
23222443
end;
23232444

23242445
procedure TLabeledDbGrid.SetIncrementalSearchDelay(const Value: integer);
@@ -2373,6 +2494,23 @@ function TLabeledDbGrid.ChangeColumnFieldName(const OldFieldName,
23732494
Column.FieldName := NewFieldName;
23742495
end;
23752496

2497+
2498+
type
2499+
THackCustomGrid = class(TCustomGrid)
2500+
public
2501+
property Options;
2502+
end;
2503+
2504+
procedure TLabeledDbGrid.SetColMoving(const Value: Boolean);
2505+
begin
2506+
FColMoving := Value;
2507+
with THackCustomGrid(Self) do
2508+
if Value then
2509+
Options := Options + [goColMoving]
2510+
else
2511+
Options := Options - [goColMoving];
2512+
end;
2513+
23762514
{ TLabeledDBLabel }
23772515

23782516
constructor TLabeledDBLabel.Create(AOwner: TComponent);

0 commit comments

Comments
 (0)