Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 procedure DBGrid1DblClick(Sender: TObject);

private

 { private declarations }

public

 { public declarations }

end;

var DBMainForm: TDBMainForm;

implementation

{$R *.DFM}

procedure TDBMainForm.FormCreate(Sender: TObject);

begin

Table1.Open;

end;

// {ПРИМЕЧАНИЕ: DBHandle -
дескриптор базы данных & DSHandle - курсор

// рассматриваемой записи. Кроме того, если вы имеете цель в

// динамической загрузке DLL во время выполнения приложения,

// используйте вызовы API LoadLibrary, GetProcAddress и

// FreeLibrary вместо подразумевающихся вызовов загрузки при

// запуске. Пример использования API для динамической загрузки: }

// Type

// {Для GetProcAddress}

// BDEDataSync =

// function(const DBHandle: HDBIDB; const DSHandle: HDBICur): Boolean;

// stdcall;

// {Организация перехвата ошибок загрузки DLL}

// EDLLLoadError = class(Exception);

// var h: hwnd;

// p: BDEDataSync;

// LastError: DWord;

// begin

// UpdateCursorPos;

// Try

// h := loadLibrary('EDITDLL.DLL');

// {Примечание для пользователей Delphi 1.0: Поскольку Win32

// LoadLibrary при неудачной загрузке DLL возвращает NULL,

// поэтому для поиска ошибки необходим вызов GetLastError,

// Win16 LoadLibrary возвращает значение ошибки (меньше чем

// HINSTANCE_ERROR), которая для выяснения причин неудачной

// загрузки может затем провериться с помощью Win16API SDK.}

// if h = 0 then begin

// LastError := GetLastError;

// Raise EDLLLoadError.create(IntToStr(LastError) +

// ': Невозможно загрузить DLL');

// end;

// try

// p := getProcAddress(h, 'EditData');

// if p(DBHandle, Handle) then Resync([]);

// finally

// freeLibrary(h);

// end;

// Except

// On E: EDLLLoadError do

// MessageDLG(E.Message, mtInformation, [mbOk],0);

// end;

// end;

// {или}

function EditData(const DBHandle: HDBIDB; const DSHandle: HDBICur): Boolean; stdcall external 'EDITDLL.DLL' name 'EditData';

procedure TDBMainForm.EditButtonClick(Sender: TObject);

begin

 with Table1 do begin

UpdateCursorPos;//
Вызываем процедуру EditData из EditDll.dll.

if EditData(DBHandle, Handle) then Resync([]);

 end;

end;

procedure TDBMainForm.DBGrid1DblClick(Sender: TObject);

begin

 EditButton.Click;

end;

end.

Проект EDIT DLL

{ EDITDLL.DPR }

library editdll;

uses SysUtils, Classes, editform in 'editform.pas' {DBEditForm};

exports EditData;

begin

end.

{ EDITFORM.PAS }

unit editform;

interface

uses SysUtils, Windows, Messages, Classes, Graphics, Controls, StdCtrls, Forms, DBCtrls, DB, DBTables, Mask, ExtCtrls, BDE;

type

 TTableClone = class;

 TDBEditForm = class(TForm);

ScrollBox: TScrollBox;

Label1: TLabel;

EditName: TDBEdit;

Label2: TLabel;

EditCapital: TDBEdit;

Label3: TLabel;

EditContinent: TDBEdit;

Label4: TLabel;

EditArea: TDBEdit;

Label5: TLabel;

EditPopulation: TDBEdit;

DBNavigator: TDBNavigator;

Panel1: TPanel;

DataSource1: TDataSource;

Panel2: TPanel;

Database1: TDatabase;

OKButton: TButton;

 private

TableClone: TTableClone;

 end;

 { TTableClone }

 TTableClone = class(TTable)

 private

Поделиться с друзьями: