📄 connections.pas
字号:
unit connections;
// -------------------------------------
// HeidiSQL
// Connections (start-window)
// -------------------------------------
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Registry, Buttons, ExtCtrls, ZPlainMySqlDriver;
type
Tconnform = class(TForm)
EditHost: TEdit;
Label1: TLabel;
Label2: TLabel;
EditBenutzer: TEdit;
Label3: TLabel;
EditPasswort: TEdit;
Label4: TLabel;
EditPort: TEdit;
Label5: TLabel;
EditTimeout: TEdit;
Panel1: TPanel;
ComboBoxDescription: TComboBox;
Image1: TImage;
Label6: TLabel;
ButtonSave: TBitBtn;
ButtonNew: TBitBtn;
ButtonDelete: TBitBtn;
Bevel1: TBevel;
ButtonCancel: TButton;
ButtonConnect: TButton;
CheckBoxCompressed: TCheckBox;
Label7: TLabel;
Label8: TLabel;
EditOnlyDBs: TEdit;
Label9: TLabel;
Timer1: TTimer;
ButtonEditDesc: TSpeedButton;
procedure ButtonCancelClick(Sender: TObject);
procedure ButtonConnectClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ButtonSaveClick(Sender: TObject);
procedure ButtonNewClick(Sender: TObject);
procedure ButtonDeleteClick(Sender: TObject);
procedure ComboBoxDescriptionClick(Sender: TObject);
procedure EnableDisable(Enable: Boolean);
procedure Modified(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ButtonEditDescClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
connform: Tconnform;
implementation
uses Main, helpers;
const
CRLF = #13#10;
{$R *.DFM}
// Cancel
procedure Tconnform.ButtonCancelClick(Sender: TObject);
begin
close;
end;
// Connect
procedure Tconnform.ButtonConnectClick(Sender: TObject);
begin
ButtonConnect.Enabled := false;
mainform.Showstatus('Connecting to ' + EditHost.Text + '...', 2, 51);
with TRegistry.Create do
begin
if OpenKey(regpath, true) then
WriteString('lastcon', ComboBoxDescription.Text);
CloseKey;
end;
close;
MainForm.connect(sender);
end;
// Init
procedure Tconnform.FormCreate(Sender: TObject);
var
oldkey : String;
begin
// Import old settings from MySQL-Front 2.5
oldkey := 'Software\MySQL-Front';
with TRegistry.Create do
begin
if OpenKey(oldkey, false) and (not Openkey(main.regpath, false)) then
try
RenameRegistryItem( rootkey, oldkey, main.regpath );
finally
free;
end;
end;
end;
// Read all connections from registry
procedure Tconnform.FormShow(Sender: TObject);
var
i : Integer;
lastcon : String;
AutoReconnect : Boolean;
begin
Screen.Cursor := crHourglass;
ComboBoxDescription.Items.Clear;
ComboBoxDescription.Text := '';
with TRegistry.Create do
begin
if OpenKey(regpath + '\Servers', true) then
begin
GetKeyNames(ComboBoxDescription.Items);
CloseKey;
end;
OpenKey(regpath, true);
lastcon := ReadString('lastcon');
if ValueExists('AutoReconnect') then
AutoReconnect := ReadBool('AutoReconnect')
else
AutoReconnect := false;
CloseKey;
end;
if ComboBoxDescription.Items.Count > 0 then
begin
EnableDisable(true);
// select one connection
with ComboBoxDescription do
begin
ItemIndex := 0;
for i:=0 to Items.Count -1 do
if Items[i] = lastcon then
ItemIndex := i;
end;
ComboBoxDescriptionClick(self);
ComboBoxDescription.SetFocus;
end else
begin
EditHost.Text := '';
EditBenutzer.Text := '';
EditPasswort.Text := '';
EditPort.Text := '';
EditTimeout.Text := '';
EditOnlyDBs.Text := '';
CheckBoxCompressed.Checked := false;
EnableDisable(false);
end;
Screen.Cursor := crDefault;
if not main.appstarted then
begin
main.appstarted := true;
if AutoReconnect and (ComboBoxDescription.ItemIndex > -1) then
begin
ButtonConnectClick(self);
Timer1.Enabled := true;
end;
end;
mainform.showstatus('Ready', 2);
end;
procedure Tconnform.ButtonSaveClick(Sender: TObject);
begin
// save connection!
Screen.Cursor := crHourglass;
with TRegistry.Create do
begin
if OpenKey(regpath + '\Servers\' + ComboBoxDescription.Text, true) then
begin
WriteString('Host', EditHost.Text);
WriteString('User', EditBenutzer.Text);
WriteString('Password', encrypt(EditPasswort.Text));
WriteString('Port', EditPort.Text);
WriteString('Timeout', EditTimeout.Text);
WriteBool('Compressed', CheckBoxCompressed.Checked);
WriteString('OnlyDBs', EditOnlyDBs.Text);
CloseKey;
end;
end;
ComboBoxDescriptionClick(self);
Screen.Cursor := crDefault;
end;
procedure Tconnform.ButtonNewClick(Sender: TObject);
var
i : Integer;
description : String;
begin
// save new connection!
with TRegistry.Create do
begin
i := 0;
description := 'New Connection';
while KeyExists(regpath + '\Servers\' + description) do
begin
inc(i);
description := 'New Connection' + ' (' + inttostr(i) + ')';
end;
if not InputQuery('New Connection...', 'Description:', description) then
exit;
if KeyExists(regpath + '\Servers\' + description) then
begin
MessageDlg('Entry "' + description + '" already exists!', mtError, [mbOK], 0);
exit;
end;
Screen.Cursor := crHourglass;
ComboBoxDescription.Items.Add(description);
ComboBoxDescription.ItemIndex := ComboBoxDescription.Items.Count - 1;
if OpenKey(regpath + '\Servers\' + ComboBoxDescription.Text, true) then
begin
WriteString('Host', LOCAL_HOST);
WriteString('User', 'root');
WriteString('Password', encrypt(''));
WriteString('Port', inttostr(MYSQL_PORT));
WriteString('Timeout', inttostr(30));
WriteBool('Compressed', false);
WriteString('OnlyDBs', '');
CloseKey;
end;
end;
EnableDisable(true);
// show parameters:
ComboBoxDescriptionClick(self);
Screen.Cursor := crDefault;
end;
procedure Tconnform.ButtonDeleteClick(Sender: TObject);
begin
if MessageDlg('Delete Entry "' + ComboBoxDescription.Text + '" ?', mtConfirmation, [mbYes, mbCancel], 0) = mrYes then
begin
with TRegistry.Create do
begin
if not DeleteKey(regpath + '\Servers\' + ComboBoxDescription.Text) then
MessageDlg('Error while deleting Key from Registry!', mtError, [mbOK], 0);
end;
FormShow(self);
end;
end;
procedure Tconnform.ComboBoxDescriptionClick(Sender: TObject);
begin
// select one connection!
Screen.Cursor := crHourglass;
with TRegistry.Create do
begin
if OpenKey(regpath + '\Servers\' + ComboBoxDescription.Text, true) then
begin
EditHost.Text := ReadString('Host');
EditBenutzer.Text := ReadString('User');
EditPasswort.Text := decrypt(ReadString('Password'));
EditPort.Text := ReadString('Port');
EditTimeout.Text := ReadString('Timeout');
CheckBoxCompressed.Checked := ReadBool('Compressed');
EditOnlyDBs.Text := ReadString('OnlyDBs');
CloseKey;
end;
end;
ButtonSave.Enabled := false;
ButtonEditDesc.Enabled := ComboBoxDescription.ItemIndex > -1;
Screen.Cursor := crDefault;
end;
procedure Tconnform.EnableDisable(Enable: Boolean);
begin
// enable or disable all controls
ComboBoxDescription.Enabled := Enable;
ButtonConnect.Enabled := Enable;
ButtonSave.Enabled := Enable;
ButtonDelete.Enabled := Enable;
EditHost.Enabled := Enable;
EditBenutzer.Enabled := Enable;
EditPasswort.Enabled := Enable;
EditPort.Enabled := Enable;
EditTimeout.Enabled := Enable;
EditOnlyDBs.Enabled := Enable;
CheckBoxCompressed.Enabled := Enable;
Label1.Enabled := Enable;
Label2.Enabled := Enable;
Label3.Enabled := Enable;
Label4.Enabled := Enable;
Label5.Enabled := Enable;
Label6.Enabled := Enable;
Label7.Enabled := Enable;
Label8.Enabled := Enable;
Label9.Enabled := Enable;
end;
procedure Tconnform.Modified(Sender: TObject);
begin
ButtonSave.Enabled := true;
end;
procedure Tconnform.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
close;
end;
{ rename connection-description }
procedure Tconnform.ButtonEditDescClick(Sender: TObject);
var
newdesc, olddesc : String;
idx : Integer;
begin
olddesc := ComboBoxDescription.Text;
newdesc := olddesc;
if not InputQuery('Edit Description', 'Edit Description:', newdesc) then
exit;
if newdesc = olddesc then
exit;
if ComboBoxDescription.Items.IndexOf(newdesc) > -1 then begin
MessageDLG('Description already exists!', mtError, [mbCancel], 0);
exit;
end;
with TRegistry.Create do begin
idx := ComboBoxDescription.ItemIndex;
try
MoveKey(regpath + '\Servers\' + olddesc, regpath + '\Servers\' + newdesc, true);
ComboBoxDescription.Items[ComboBoxDescription.ItemIndex] := newdesc;
ComboBoxDescription.ItemIndex := idx;
ComboBoxDescriptionClick(self);
except
MessageDLG('Error on renaming.', mtError, [mbCancel], 0);
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -