unit _BaseTemplate; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, StrUtils, TypeDefs; type TNewConnectionEvent = procedure(ConnectionID: Integer) of object; TCheckCloseableEvent = function: Boolean of object; TForm_BaseTemplate = class(TForm) panel_connection: TPanel; label_connection: TLabel; combo_connection: TComboBox; panel_basecontent: TPanel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormActivate(Sender: TObject); procedure combo_connectionChange(Sender: TObject); protected FOnNewConnection: TNewConnectionEvent; FOnCheckCloseable: TCheckCloseableEvent; FConnectionID: Integer; function GetToolCloseable: Boolean; public constructor Create(AOwner: TComponent); override; procedure UpdateConList; procedure SelectConnection(ConnectionID: Integer); published property OnNewConnection: TNewConnectionEvent read FOnNewConnection write FOnNewConnection; property OnCheckCloseable: TCheckCloseableEvent read FOnCheckCloseable write FOnCheckCloseable; property ConnectionID: Integer read FConnectionID; property Closeable: Boolean read GetToolCloseable; end; implementation {$R *.dfm} uses Main, ConnectionManager; procedure TForm_BaseTemplate.UpdateConList; var i: Integer; fn, datatype, boxstring: String; level: Integer; begin combo_connection.ItemIndex := -1; combo_connection.Items.Clear; if ConManager.Count > 0 then begin for i := 0 to ConManager.Count - 1 do begin level := ConManager.ConnectionByIndex[i].LevelNumber; fn := ExtractFileName(ConManager.ConnectionByIndex[i].FileName); if ConManager.ConnectionByIndex[i].Backend = DB_ONI then datatype := 'ONI-.dat: ' else if ConManager.ConnectionByIndex[i].Backend = DB_ADB then datatype := 'OUP-DB: ' else datatype := 'Unknown: '; boxstring := datatype + fn + ' (Level: ' + IntToStr(level) + ') [' + IntToStr(ConManager.ConnectionByIndex[i].ConnectionID) + ']'; combo_connection.Items.Add(boxstring); if ConManager.ConnectionByIndex[i].ConnectionID = FConnectionID then combo_connection.ItemIndex := combo_connection.Items.Count - 1; end; if combo_connection.ItemIndex = -1 then begin combo_connection.ItemIndex := 0; combo_connectionChange(Self); end; end else begin FConnectionID := 0; combo_connectionChange(Self); end; end; procedure TForm_BaseTemplate.combo_connectionChange(Sender: TObject); var name: String; begin if combo_connection.ItemIndex >= 0 then begin name := combo_connection.Items.Strings[combo_connection.ItemIndex]; FConnectionID := StrToInt(MidStr(name, Pos('[', name) + 1, Pos(']', name) - Pos('[', name) - 1)); end else FConnectionID := -1; if Assigned(FOnNewConnection) then FOnNewConnection(FConnectionID); end; procedure TForm_BaseTemplate.SelectConnection(ConnectionID: Integer); begin if FConnectionID <> ConnectionID then begin combo_connection.ItemIndex := ConManager.ConnectionIndexByID[ConnectionID]; combo_connectionChange(Self); end; end; function TForm_BaseTemplate.GetToolCloseable: Boolean; begin if Assigned(FOnCheckCloseable) then Result := FOnCheckCloseable else Result := True; end; constructor TForm_BaseTemplate.Create(AOwner: TComponent); begin inherited; Self.Width := 260; Self.Height := 300; FOnNewConnection := nil; FOnCheckCloseable := nil; FConnectionID := -1; end; procedure TForm_BaseTemplate.FormActivate(Sender: TObject); begin if panel_basecontent.CanFocus then panel_basecontent.SetFocus; end; procedure TForm_BaseTemplate.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.