Edit3: TEdit;
procedureOKBtnClick(Sender: TObject);
procedureFormShow(Sender: TObject);
private
{ Private declarations }
public
S1, S2, S3: String;
{ Public declarations }
end;
var DataEntry: TDataEntry;
implementation
{$R *.DFM}
procedureTDataEntry.OKBtnClick(Sender: TObject);
begin
S1 := Edit1.Text;
S2 := Edit2.Text;
S3 := Edit3.Text;
end;
procedureTDataEntry.FormShow(Sender: TObject);
begin
Edit1.Text := '0';
Edit2.Text := '0';
Edit3.Text := '0';
Edit1.SetFocus;
end;
end.
{ *** КОНЕЦ КОДА DDEDLG.PAS *** }
Как добавить группу в Program Manager?
interface
procedureCreateGroup;
implementation
procedureTSetupForm.CreateGroup;
{ Для установки группы в Program Manager используем компонент TProgMan }
var
ItemList: TStringList;
GroupName: String;
ItemName: String;
i: word;
begin
{ Получаем из INI-файла строку GroupName }
GroupName := IniFile.ReadString('General', 'PMGroup', '');
{ Если один есть, устанавливаем группу }
ifGroupName <> '' then begin
ItemList := TStringList.Create;
try
{ читаем элементы для установки }
IniFile.ReadSectionValues('PMGroup', ItemList);
withTProgMan.Create(Self) do try
CreateGroup(GroupName);
fori := 0 toItemList.Count – 1 do begin
{ получаем имя файла }
ItemName := Copy(ItemList.Strings[i], 1, Pos('=', ItemList.Strings[i]) – 1);
{ прибавляем путь к имени файла и добавляем элемент }
AddItem(GetTarget(ItemList.Values[ItemName][1]) + ItemName, ItemName);
end;
finally
Free;
end;
finally
ItemList.Free;
end;
end;
end;
OLE-автоматизация в Delphi 1
Delphi 16 также может осуществлять автоматизацию OLE, как она может и многое другое. Другое дело, что у нее нет компонентов-инкапсуляторов, и нет традиционных объектов, делающих работу с OLE такой же легкой, как это происходит с другими вещами в Delphi. Delphi32 таки должен иметь какие-то характеристики для работы с OLE (я так надеюсь).
Так, если вы собираетесь делать какие-то действия с любым типом OLE-сервера, то для этого вам необходимо будет использовать все нудные и противные рутинки из набора Windows SDK. Но будет лучше, если всем этим будет заправлять специализированный компонент. Но этот вопрос уже не к Borland.
Следующий код компилируется без проблем. Он не так ясен и понятен, но он может вам помочь:
unitUnit1;
interface
functionOLEfunction(x, y, z: integer): integer; cdecl; export;
implementation
functionOLEfunction(x, y, z: integer): integer;
begin
end;
procedurebuildOLEstructure;
varF: pointer;
begin
F := @OLEfunction; { Компилируется без проблем … }
end;
end.
Используйте метод, приведенный ниже. Вы должны объявить одну вызывающую функцию к каждой комбинации параметров, которые вы собираетесь передавать. Затем вы вызываете вызывающую функцию (сорри) и передаете ей как указатель функцию, которую вы хотите вызвать (еще раз сорри). Непонятно? Поясню на примере:
librarypcdecl;
functionolefunction(a1: pchar; a2: longint; x: integer): integer; cdecl; export;
begin
end;
functioncallolefunction(func: pointer; a1: pchar; a2: longint; x: integer): integer; assembler;
asm
push x { помещаем параметры в обратном порядке }
push word ptr a2 + 2 { если 32-битная величина передается в этих двух шагах, то начинаем с самой «высокой» (high) части }
push word ptr a2
push word ptr a1 + 2
push word ptr a1
call func
add sp, 10 { восстанавливаем стек добавлением вытолкнутых байтов. Обратите внимание на то, что func не была вытолкнута }
end;
procedurebuildolefunction;
var
f: pointer;
reslt: integer;
begin
f := @olefunction;
{ --- }
reslt := callolefunction(f, 'Здравствуй, мир', 1000000, 25);
{ --- }
end;
begin
Читать дальше