X := 350;
Y := 250;
end;
end;
end;
end.
TIniFile
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ini-ΡΠ°ΠΉΠ»Π°
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΠΌΠ΅Π» ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ TIniFile? Π― Π΄ΡΠΌΠ°Ρ Π·Π΄Π΅ΡΡ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ Π΄Π΅ΡΡΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ!!!
ΠΠΎΡ ΡΡΠΎ Ρ Π΄Π΅Π»Π°Π»:
(* c:\test.ini ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ *)
myIni := TIniFile.Create('c:\test.ini');
With myIni do begin
β¦. (Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΠΈΡ Π² test.ini
end;
myIni.Free;
RenameFile('c:\test.ini', 'c:\test1.ini');
Π§ΡΠΎ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»:
1. test1.ini ΠΠ ΠΠΠΠΠ’ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ½ΠΎΡ ΡΠ΅ΠΊΡΠΈΠΈ;
2. Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ File Manager, 'c:\test.ini' ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½ΠΎΠ²Ρ, ΠΈ Ρ Π½Π΅Π³ΠΎ Π‘Π£Π©ΠΠ‘Π’ΠΠ£ΠΠ’ ΡΠ΅ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ».
Π― ΡΠ΅ΡΠΈΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄ IniFile.Free:
WritePrivateProfileString(nil, nil, nil, PChar(IniFileName));
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΊΠ΅ ΠΊ ΡΠ°Π·Π΄Π΅Π»Ρ 'WritePrivateProfileString'.
β Tony Chang
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Ini-ΡΠ°ΠΉΠ» Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ini-ΡΠ°ΠΉΠ» ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² Windows-Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: TIniFile.Create('MFile.ini')), ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Β«Π·Π°Ρ Π»Π°ΠΌΠ»Π΅Π½ΠΈΡΒ» ΠΎΠ½ΠΎΠΉ. ΠΠΎΠ»Π΅Π΅ (ΡΠΊΠΎ-)Π»ΠΎΠ³ΠΈΡΠ½ΠΎ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ CD-ROM) Π΅ΡΠ»ΠΈ ini-ΡΠ°ΠΉΠ» ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΡΡΠΎ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ini ΡΠ°ΠΉΠ»Π° ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
function ReadIni(ASection, AString : String) : String;
var
sIniFile: TIniFile;
sPath : String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Name.INI');
Result := sIniFile.ReadString(ASection, AString, S);
sIniFile.Free;
end;
procedure WriteIni(ASection, AString, AValue: String);
var
sIniFile: TIniFile;
sPath : String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Name.INI');
sIniFile.WriteString(ASection, AString, AValue);
sIniFile.Free;
end;
TRegistry
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ TRegistry, ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° REG_MULTI_SZ (Windows NT, Windows 2000)
ΠΠΎΠ½Π΄ΡΠ°ΡΡΠΊ ΠΠΈΡΠ°Π»ΠΈΠΉ ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
unit Reg;
{$R-,T-,H+,X+}
interface
uses Registry, Classes, Windows, Consts, SysUtils;
type TReg = class(TRegistry)
public
procedure ReadStringList(const name : string; list : TStringList);
procedure WriteStringList(const name : string; list : TStringList);
end;
implementation
//*** TReg *********************************************************************
//------------------------------------------------------------------------------
// ΠΠ°ΠΏΠΈΡΡ TStringList Π²Π²ΠΈΠ΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° REG_MULTI_SZ Π² ΡΠ΅Π΅ΡΡΡ
//------------------------------------------------------------------------------
procedure TReg.WriteStringList(const name : string; list : TStringList);
var
Buffer : Pointer;
BufSize : DWORD;
i, j, k : Integer;
s : string;
p : PChar;
begin
{ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ Π±ΡΡΠ΅Ρ ΠΊ Π·Π°ΠΏΠΈΡΠΈ}
BufSize := 0;
for i:=0 to list.Count-1 do inc(BufSize, Length(list[i])+1);
inc(BufSize);
GetMem(Buffer, BufSize);
k := 0;
p := Buffer;
for i:=0 to list.Count-1 do begin
s := list[i];
for j:=0 to Length(s)-1 do begin
p[k] := s[j+1];
inc(k);
end;
p[k] := chr(0);
inc(k);
end;
p[k] := chr(0);
{Π·Π°ΠΏΠΈΡΡ Π² ΡΠ΅Π΅ΡΡΡ}
if RegSetValueEx(CurrentKey, PChar(name), 0, REG_MULTI_SZ, Buffer, BufSize) <> ERROR_SUCCESS then raise ERegistryException.CreateResFmt(@SRegSetDataFailed, [name]);
end;
//------------------------------------------------------------------------------
// Π§ΡΠ΅Π½ΠΈΠ΅ TStringList Π²Π²ΠΈΠ΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° REG_MULTI_SZ ΠΈΠ· ΡΠ΅Π΅ΡΡΡΠ°
//------------------------------------------------------------------------------
procedure TReg.ReadStringList(const name : string; list : TStringList);
var
BufSize,DataType: DWORD;
Len, i: Integer;
Buffer: PChar;
s: string;
begin
if list = nil then Exit;
{ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅Π΅ΡΡΡΠ°}
Len := GetDataSize(Name);
if Len < 1 then Exit;
Buffer := AllocMem(Len);
if Buffer = nil then Exit;
try
DataType := REG_NONE;
BufSize := Len;
if RegQueryValueEx(CurrentKey, PChar(name), nil, @DataType, PByte(Buffer), @BufSize) <> ERROR_SUCCESS then raise ERegistryException.CreateResFmt(@SRegGetDataFailed, [name]);
if DataType <> REG_MULTI_SZ then raise ERegistryException.CreateResFmt(@SInvalidRegType, [name]);
{Π·Π°ΠΏΠΈΡΡ Π² TStringList}
list.Clear;s := '';
for i:=0 to BufSize-2 do begin
// BufSize-2 Ρ.ΠΊ. ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° Π½ΡΠ»Π΅Π²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°
if Buffer[i] = chr(0) then begin
list.Add(s);
s := '';
end else s := s + Buffer[i];
end;
finally
FreeMem(Buffer);
end;
end;
end.
ΠΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΡΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΡΠ΅ΡΠ΅Π· Registry?
Nomadic ΡΠΎΠ²Π΅ΡΡΠ΅Ρ:
ΠΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠ»ΡΡ ΠΏΠΎΠ΄ HKEY_CLASSES_ROOT\CLSID\*, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π΅Π³ΠΎ Π½Π°ΡΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡ "Borland DataBroker". ΠΡΠΈ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Listbox:
uses Registry;
procedure TForm1.FormCreate(Sender: TObject);
var
I: integer;
TempList: TStringList;
begin
TempList := TStringList.Create;
try
with TRegistry.Create do try
RootKey := HKEY_CLASSES_ROOT;
if OpenKey('CLSID', False) then GetKeyNames(TempList);
CloseKey;
for I := 1 to TempList.Count - 1 do
if KeyExists('CLSID\' + TempList[I] + '\Borland DataBroker') then begin
if OpenKey('CLSID\' + TempList[I] + '\ProgID', False) then begin
Listbox1.Items.Add(ReadString(''));
CloseKey;
end;
end;
finally
Free;
end;
finally
TempList.Free;
end;
end;
OLE+
ActiveX
ΠΡΠΈΠ±ΠΊΠ° 'EOLESYS..OPERATION UNAVAILABLE' (ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π°) ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ GETACTIVEOLEOBJECT
Delphi 3
ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Delphi, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, word.basic) Π½Π΅ Π·Π°ΠΏΡΡΠ΅Π½.
procedure TForm1.Button1Click(Sender: TObject);
var V: OleVariant;
begin
V := GetActiveOleObject('Word.Basic');
V.FileNew;
V.Insert('ΡΠ΅ΡΡ');
end;
GetActiveOleObject ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ComObj.pas. ΠΠ½ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π² guid ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Windows api ΡΡΠ½ΠΊΡΠΈΠΈ GetActiveObject.
function GetActiveOleObject(const ClassName: string): IDispatch;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
ClassID := ProgIDToClassID(ClassName);
OleCheck(GetActiveObject(ClassID, nil, Unknown));
OleCheck(Unknown.QueryInterface(IDispatch, Result));
end;
GetActiveOleObject ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ IRunningObjectTable. ΠΡ Π½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ.
ΠΡΠΈΠ±ΠΊΠ° 'TACTIVEFORMX DECLARATION MISSING OR INCORRECT' (ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ TACTIVEFORMX ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ)
Delphi 3
ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ActiveForm (ΡΠΌΠΎΡΡΠΈ README.TXT). ΠΡΠ»ΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈΠΌΡ CoClass, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (refresh), Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ AV. ΠΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΡ Π² ΠΠ½ΡΠΏΠ΅ΠΊΡΠΎΡΠ΅ ΠΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ Β«TActiveFormX declaration missing or incorrectΒ» (ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ TActiveFormX ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ). ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ .DFM-ΡΠ°ΠΉΠ» ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠΎΡΠΊΡ:
object ActiveFormX: TActiveFormX
Π½Π°
object MyForm: TMyForm