mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 22:00:16 +08:00
Display progress in GridToXYZ by putting a progessbar in a new panel of the status bar. Should be used for other time consuming loops as well. Related to bug #793: app freezes when 'copy as csv/xml/html' is selected
This commit is contained in:
@ -774,6 +774,7 @@ begin
|
||||
Mainform.Showstatus('Exporting row '+FormatNumber(Node.Index+1)+' of '+FormatNumber(RootNodeCount)+
|
||||
' ('+IntToStr(Trunc((Node.Index+1) / RootNodeCount *100))+'%, '+FormatByteNumber(StreamSize)+')'
|
||||
);
|
||||
Mainform.ProgressBarStatus.Position := Node.Index+1;
|
||||
end;
|
||||
|
||||
|
||||
@ -789,6 +790,8 @@ var
|
||||
Node: PVirtualNode;
|
||||
begin
|
||||
MaxSize := GetRegValue(REGNAME_COPYMAXSIZE, DEFAULT_COPYMAXSIZE) * SIZE_MB;
|
||||
Mainform.ProgressBarStatus.Visible := True;
|
||||
Mainform.ProgressBarStatus.Max := Grid.RootNodeCount;
|
||||
Generator := APPNAME+' '+FullAppVersion;
|
||||
tmp :=
|
||||
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ' + CRLF +
|
||||
@ -886,6 +889,7 @@ begin
|
||||
'</html>' + CRLF;
|
||||
StreamWrite(S, tmp);
|
||||
Grid.Visible := true;
|
||||
Mainform.ProgressBarStatus.Visible := False;
|
||||
Mainform.Showstatus(STATUS_MSG_READY);
|
||||
end;
|
||||
|
||||
@ -908,6 +912,8 @@ begin
|
||||
encloser := esc2ascii(encloser);
|
||||
terminator := esc2ascii(terminator);
|
||||
MaxSize := GetRegValue(REGNAME_COPYMAXSIZE, DEFAULT_COPYMAXSIZE) * SIZE_MB;
|
||||
Mainform.ProgressBarStatus.Visible := True;
|
||||
Mainform.ProgressBarStatus.Max := Grid.RootNodeCount;
|
||||
|
||||
tmp := '';
|
||||
// Columns
|
||||
@ -967,6 +973,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
Grid.Visible := true;
|
||||
Mainform.ProgressBarStatus.Visible := False;
|
||||
Mainform.showstatus(STATUS_MSG_READY);
|
||||
end;
|
||||
|
||||
@ -984,6 +991,8 @@ var
|
||||
Node: PVirtualNode;
|
||||
begin
|
||||
MaxSize := GetRegValue(REGNAME_COPYMAXSIZE, DEFAULT_COPYMAXSIZE) * SIZE_MB;
|
||||
Mainform.ProgressBarStatus.Visible := True;
|
||||
Mainform.ProgressBarStatus.Max := Grid.RootNodeCount;
|
||||
tmp := '<?xml version="1.0"?>' + CRLF + CRLF +
|
||||
'<table name="'+root+'">' + CRLF;
|
||||
StreamWrite(S, tmp);
|
||||
@ -1037,6 +1046,7 @@ begin
|
||||
tmp := '</table>' + CRLF;
|
||||
StreamWrite(S, tmp);
|
||||
Grid.Visible := true;
|
||||
Mainform.ProgressBarStatus.Visible := False;
|
||||
Mainform.showstatus(STATUS_MSG_READY);
|
||||
end;
|
||||
|
||||
@ -1053,6 +1063,8 @@ var
|
||||
Node: PVirtualNode;
|
||||
begin
|
||||
MaxSize := GetRegValue(REGNAME_COPYMAXSIZE, DEFAULT_COPYMAXSIZE) * SIZE_MB;
|
||||
Mainform.ProgressBarStatus.Visible := True;
|
||||
Mainform.ProgressBarStatus.Max := Grid.RootNodeCount;
|
||||
// Avoid reloading discarded data before the end.
|
||||
Grid.Visible := false;
|
||||
Node := Grid.GetFirst;
|
||||
@ -1107,6 +1119,7 @@ begin
|
||||
tmp := CRLF;
|
||||
StreamWrite(S, tmp);
|
||||
Grid.Visible := true;
|
||||
Mainform.ProgressBarStatus.Visible := False;
|
||||
Mainform.showstatus(STATUS_MSG_READY);
|
||||
end;
|
||||
|
||||
|
@ -95,6 +95,9 @@ object MainForm: TMainForm
|
||||
item
|
||||
Width = 150
|
||||
end
|
||||
item
|
||||
Width = 80
|
||||
end
|
||||
item
|
||||
Width = 250
|
||||
end>
|
||||
@ -1502,6 +1505,14 @@ object MainForm: TMainForm
|
||||
end
|
||||
end
|
||||
end
|
||||
object ProgressBarStatus: TProgressBar
|
||||
Left = 545
|
||||
Top = 445
|
||||
Width = 81
|
||||
Height = 17
|
||||
Step = 1
|
||||
TabOrder = 4
|
||||
end
|
||||
object MainMenu1: TMainMenu
|
||||
AutoHotkeys = maManual
|
||||
Images = PngImageListMain
|
||||
|
@ -22,7 +22,7 @@ uses
|
||||
SynCompletionProposal, ZSqlMonitor, SynEditHighlighter, SynHighlighterSQL,
|
||||
TntStdCtrls, Tabs, SynUnicode, mysqlconn, EditVar, helpers, queryprogress,
|
||||
mysqlquery, createdatabase, createtable, tbl_properties, SynRegExpr,
|
||||
WideStrUtils, ZDbcLogging, ExtActns;
|
||||
WideStrUtils, ZDbcLogging, ExtActns, CommCtrl;
|
||||
|
||||
type
|
||||
TMainForm = class(TForm)
|
||||
@ -452,6 +452,7 @@ type
|
||||
actSelectAll: TAction;
|
||||
actSelectAll1: TMenuItem;
|
||||
N13: TMenuItem;
|
||||
ProgressBarStatus: TProgressBar;
|
||||
procedure refreshMonitorConfig;
|
||||
procedure loadWindowConfig;
|
||||
procedure saveWindowConfig;
|
||||
@ -481,7 +482,7 @@ type
|
||||
procedure actCopyAsCSVExecute(Sender: TObject);
|
||||
procedure actPrintListExecute(Sender: TObject);
|
||||
procedure actCopyTableExecute(Sender: TObject);
|
||||
procedure showstatus(msg: string=''; panel: Integer=5);
|
||||
procedure showstatus(msg: string=''; panel: Integer=6);
|
||||
function mask(str: WideString) : WideString;
|
||||
procedure actExecuteQueryExecute(Sender: TObject);
|
||||
procedure actExecuteSelectionExecute(Sender: TObject);
|
||||
@ -1007,7 +1008,7 @@ begin
|
||||
ExecuteNonQuery(query);
|
||||
end;
|
||||
|
||||
procedure TMainForm.showstatus(msg: string=''; panel: Integer=5);
|
||||
procedure TMainForm.showstatus(msg: string=''; panel: Integer=6);
|
||||
begin
|
||||
// show Message in statusbar
|
||||
StatusBar.Panels[panel].Text := msg;
|
||||
@ -1486,6 +1487,10 @@ begin
|
||||
menuitem.Checked := coVisible in ListTables.Header.Columns[i].Options;
|
||||
popupDbGridHeader.Items.Add( menuitem );
|
||||
end;
|
||||
|
||||
// Place progressbar on the statusbar
|
||||
ProgressBarStatus.Parent := StatusBar;
|
||||
ProgressBarStatus.Visible := False;
|
||||
end;
|
||||
|
||||
|
||||
@ -1790,11 +1795,17 @@ end;
|
||||
procedure TMainForm.FormResize(Sender: TObject);
|
||||
var
|
||||
i, room: Integer;
|
||||
PanelRect: TRect;
|
||||
begin
|
||||
room := 0;
|
||||
for i := 1 to Statusbar.Panels.Count - 1 do
|
||||
inc(room, Statusbar.Panels[i].Width);
|
||||
StatusBar.Panels[0].Width := Statusbar.Width - room;
|
||||
// Retreive the rectancle of the statuspanel (in our case the fifth panel)
|
||||
SendMessage(StatusBar.Handle, SB_GETRECT, 5, Integer(@PanelRect));
|
||||
// Position the progressbar over the panel on the statusbar
|
||||
with PanelRect do
|
||||
ProgressBarStatus.SetBounds(Left, Top, Right-Left, Bottom-Top);
|
||||
lblDataTop.Width := pnlDataTop.Width - tlbDataButtons.Width - 10;
|
||||
end;
|
||||
|
||||
|
Reference in New Issue
Block a user