⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connections.pas

📁 MysqlFront的源码
💻 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 + -