mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-14 10:02:10 +08:00
Do auto calculation of column widths also in the query results
This commit is contained in:
@ -491,6 +491,7 @@ type
|
|||||||
procedure ToggleFilterPanel(ForceVisible: Boolean = False);
|
procedure ToggleFilterPanel(ForceVisible: Boolean = False);
|
||||||
function GetSelTableColumns: TDataset;
|
function GetSelTableColumns: TDataset;
|
||||||
function GetSelTableKeys: TDataset;
|
function GetSelTableKeys: TDataset;
|
||||||
|
procedure AutoCalcColWidths(Tree: TVirtualStringTree);
|
||||||
|
|
||||||
public
|
public
|
||||||
DatabasesWanted,
|
DatabasesWanted,
|
||||||
@ -1189,7 +1190,7 @@ end;
|
|||||||
procedure TMDIChild.viewdata(Sender: TObject);
|
procedure TMDIChild.viewdata(Sender: TObject);
|
||||||
var
|
var
|
||||||
sorting : WideString;
|
sorting : WideString;
|
||||||
i, ColTextWidth : Integer;
|
i : Integer;
|
||||||
OrderColumns : TOrderColArray;
|
OrderColumns : TOrderColArray;
|
||||||
reg_value : String;
|
reg_value : String;
|
||||||
select_base : WideString;
|
select_base : WideString;
|
||||||
@ -1203,7 +1204,6 @@ var
|
|||||||
rx : TRegExpr;
|
rx : TRegExpr;
|
||||||
ColType : String;
|
ColType : String;
|
||||||
PrevCols : WideStrings.TWideStringList;
|
PrevCols : WideStrings.TWideStringList;
|
||||||
Node : PVirtualNode;
|
|
||||||
|
|
||||||
procedure InitColumn(idx: Integer; name: WideString);
|
procedure InitColumn(idx: Integer; name: WideString);
|
||||||
var
|
var
|
||||||
@ -1442,33 +1442,8 @@ begin
|
|||||||
FreeAndNil(sl_query);
|
FreeAndNil(sl_query);
|
||||||
if PrevCols <> nil then
|
if PrevCols <> nil then
|
||||||
FreeAndNil(PrevCols)
|
FreeAndNil(PrevCols)
|
||||||
else begin
|
else
|
||||||
// Find optimal default width for columns. Needs to be done late, after the SQL
|
AutoCalcColWidths(DataGrid);
|
||||||
// composing to enable text width calculation based on actual table content
|
|
||||||
DataGrid.BeginUpdate;
|
|
||||||
// Weird: Fixes first time calculation always based on Tahoma/8pt font
|
|
||||||
DataGrid.Canvas.Font := DataGrid.Font;
|
|
||||||
for i := 0 to DataGrid.Header.Columns.Count - 1 do begin
|
|
||||||
if not (coVisible in DataGrid.Header.Columns[i].Options) then
|
|
||||||
continue;
|
|
||||||
ColTextWidth := DataGrid.Canvas.TextWidth(DataGrid.Header.Columns[i].Text);
|
|
||||||
Node := DataGrid.GetFirst;
|
|
||||||
while Assigned(Node) do begin
|
|
||||||
ColTextWidth := Max(ColTextWidth, DataGrid.Canvas.TextWidth(DataGrid.Text[Node, i]));
|
|
||||||
if Node.Index > 100 then
|
|
||||||
break;
|
|
||||||
Node := DataGrid.GetNext(Node);
|
|
||||||
end;
|
|
||||||
// Add space for sort glyph
|
|
||||||
if DataGrid.Header.Columns[i].ImageIndex > -1 then
|
|
||||||
ColTextWidth := ColTextWidth + 20;
|
|
||||||
// text margins and minimal extra space
|
|
||||||
ColTextWidth := ColTextWidth + DataGrid.TextMargin*2 + 5;
|
|
||||||
ColTextWidth := Min(ColTextWidth, self.prefDefaultColWidth);
|
|
||||||
DataGrid.Header.Columns[i].Width := ColTextWidth;
|
|
||||||
end;
|
|
||||||
DataGrid.EndUpdate;
|
|
||||||
end;
|
|
||||||
|
|
||||||
viewingdata := false;
|
viewingdata := false;
|
||||||
Screen.Cursor := crDefault;
|
Screen.Cursor := crDefault;
|
||||||
@ -2551,7 +2526,6 @@ begin
|
|||||||
ColName := ds.Fields[i].FieldName;
|
ColName := ds.Fields[i].FieldName;
|
||||||
col := QueryGrid.Header.Columns.Add;
|
col := QueryGrid.Header.Columns.Add;
|
||||||
col.Text := ColName;
|
col.Text := ColName;
|
||||||
col.Width := prefDefaultColWidth;
|
|
||||||
col.Options := col.Options - [coAllowClick];
|
col.Options := col.Options - [coAllowClick];
|
||||||
FQueryGridResult.Columns[i].Name := ColName;
|
FQueryGridResult.Columns[i].Name := ColName;
|
||||||
if ds.Fields[i].DataType in [ftSmallint, ftInteger, ftWord, ftLargeint] then begin
|
if ds.Fields[i].DataType in [ftSmallint, ftInteger, ftWord, ftLargeint] then begin
|
||||||
@ -2585,6 +2559,7 @@ begin
|
|||||||
ds.Free;
|
ds.Free;
|
||||||
QueryGrid.RootNodeCount := Length(FQueryGridResult.Rows);
|
QueryGrid.RootNodeCount := Length(FQueryGridResult.Rows);
|
||||||
QueryGrid.EndUpdate;
|
QueryGrid.EndUpdate;
|
||||||
|
AutoCalcColWidths(QueryGrid);
|
||||||
end;
|
end;
|
||||||
// Ensure controls are in a valid state
|
// Ensure controls are in a valid state
|
||||||
ValidateControls;
|
ValidateControls;
|
||||||
@ -6342,4 +6317,37 @@ begin
|
|||||||
FreeAndNil(reg);
|
FreeAndNil(reg);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TMDIChild.AutoCalcColWidths(Tree: TVirtualStringTree);
|
||||||
|
var
|
||||||
|
Node: PVirtualNode;
|
||||||
|
i, ColTextWidth: Integer;
|
||||||
|
begin
|
||||||
|
// Find optimal default width for columns. Needs to be done late, after the SQL
|
||||||
|
// composing to enable text width calculation based on actual table content
|
||||||
|
Tree.BeginUpdate;
|
||||||
|
// Weird: Fixes first time calculation always based on Tahoma/8pt font
|
||||||
|
Tree.Canvas.Font := Tree.Font;
|
||||||
|
for i := 0 to Tree.Header.Columns.Count - 1 do begin
|
||||||
|
if not (coVisible in Tree.Header.Columns[i].Options) then
|
||||||
|
continue;
|
||||||
|
ColTextWidth := Tree.Canvas.TextWidth(Tree.Header.Columns[i].Text);
|
||||||
|
Node := Tree.GetFirst;
|
||||||
|
while Assigned(Node) do begin
|
||||||
|
ColTextWidth := Max(ColTextWidth, Tree.Canvas.TextWidth(Tree.Text[Node, i]));
|
||||||
|
if Node.Index > 100 then
|
||||||
|
break;
|
||||||
|
Node := Tree.GetNext(Node);
|
||||||
|
end;
|
||||||
|
// Add space for sort glyph
|
||||||
|
if Tree.Header.Columns[i].ImageIndex > -1 then
|
||||||
|
ColTextWidth := ColTextWidth + 20;
|
||||||
|
// text margins and minimal extra space
|
||||||
|
ColTextWidth := ColTextWidth + Tree.TextMargin*2 + 5;
|
||||||
|
ColTextWidth := Min(ColTextWidth, self.prefDefaultColWidth);
|
||||||
|
Tree.Header.Columns[i].Width := ColTextWidth;
|
||||||
|
end;
|
||||||
|
Tree.EndUpdate;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Reference in New Issue
Block a user