Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΏΠΎ Delphi. ВСрсия 1.4.3 ΠΎΡ‚ 1.1.2001Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 97

Автор Π’Π°Π»Π΅Π½Ρ‚ΠΈΠ½ ΠžΠ·Π΅Ρ€ΠΎΠ²

   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