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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Π’Ρ€ΡŽΠΊΠΈ ΠΈ эффСкты». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 17

Автор Π’Π°Π»Π΅Ρ€ΠΈΠΉ Борисок

β€’ ссылка Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Cardinal для сохранСния Π² Π½Π΅ΠΉ Π½Π°Π±ΠΎΡ€Π° Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ² с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы;

β€’ Π±ΡƒΡ„Π΅Ρ€ для названия Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (ΠΈ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π°).

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² листингС 4.4 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetDrivelnf ormation являСтся Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ структуры (записи) Drivelnf ΠΎ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этой структуры (Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² Π½Π΅Π΅ структуры, хранящСй Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ маски fsOptions Ρ„Π»Π°Π³ΠΈ) приводится Π² листингС 4.5.

...

Листинг 4.5.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ записСй для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дискС

Type

//Π—Π°ΠΏΠΈΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС

FSOptions = record

CaseSensitive: Boolean; //ΠŸΡ€ΠΈ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΈ ΠΏΡƒΡ‚Π΅ΠΉ

//ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ рСгистр

SupportCompression: Boolean; //Ѐайловая систСма

//ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сТатиС

IsCompressed: Boolean; //Диск сТат

end;

//Π—Π°ΠΏΠΈΡΡŒ, содСрТащая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ дискС

DriveInfo = record

DriveLabel: String; //ΠœΠ΅Ρ‚ΠΊΠ° диска

FileSystemName: String; //Ѐайловая систСма диска

FileSystemOptions: FSOptions; //ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы

SerialNumber: DWORD; //Π‘Π΅Ρ€ΠΈΠΉΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚ΠΎΠΌΠ°

MaxFileNameLen: Cardinal; //Максимальная длина имСни

//Ρ„Π°ΠΉΠ»Π°

end;

НапослСдок рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ – ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° носитСля диска ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetDriveType. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ диска (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘: \, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш Π½Π° ΠΊΠΎΠ½Ρ†Π΅ обязатСлСн). Ѐункция GetDriveType Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ‚ΠΈΠΏ диска. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ получСния тСкстового описания Ρ‚ΠΈΠΏΠΎΠ² дисков с использованиСм этой API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 4.6.

...

Листинг 4.6.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° носитСля диска

function GetDriveTypeName(root: String): String;

begin

case GetDriveType(PAnsiChar(root)) of

DRIVE_UNKNOWN: GetDriveTypeName := \'НС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½\

DRIVE_REMOVABLE: GetDriveTypeName := \'Π‘ΠΌΠ΅Π½Π½Ρ‹ΠΉ\

DRIVE_FIXED: GetDriveTypeName := \'Ѐиксированный\

DRIVE_REMOTE: GetDriveTypeName := \'Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ (сСтСвой)\

DRIVE_CDROM: GetDriveTypeName := \'ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚-диск\

DRIVE_RAMDISK: GetDriveTypeName := \'RAM-диск\

else

GetDriveTypeName := \'\' //ВозвращаСтся Π² случаС ошибки

end;

end;

ИзмСнСниС ΠΌΠ΅Ρ‚ΠΊΠΈ диска

Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, слоТно Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ диска? БовсСм Π½Π΅Ρ‚: вся ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ состоит Π² отыскании Π½ΡƒΠΆΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SetVolumeLabel (листинг 4.7).

...

Листинг 4.7.

ИзмСнСниС ΠΌΠ΅Ρ‚ΠΊΠΈ диска

function SetDriveLabel(root, newLabel: String): Boolean;

begin

SetDriveLabel :=

SetVolumeLabel(PAnsiChar(root), PAnsiChar(newLabel)) <> False;

end;

Π’ листингС 4.7 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° функция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° для API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ измСнСния ΠΌΠ΅Ρ‚ΠΊΠΈ диска, ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‰Π°Ρ нас ΠΎΡ‚ нСобходимости прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просмотра свойств дисков

Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с дисками рассмотрим Π΅Ρ‰Π΅ нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ сказанноС Π²Ρ‹ΡˆΠ΅. Для этого создадим нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, выводящСС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ любом ΠΈΠ· дисков ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности всСх рассмотрСнных Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Окно этого прилоТСния ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½Π° рис. 4.1.

Рис. 4.1. Окно с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ дисках

Π Π°Π±ΠΎΡ‚Π° Ρ„ΠΎΡ€ΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° рис. 4.1, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ просто. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈ создании Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список дисков (Π° Ρ‚Π°ΠΊΠΆΠ΅ выдСляСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ диск ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π΅ΠΌ) (листинг 4.8).

...

Листинг 4.8.

БоставлСниС списка дисков

procedure TForm1.FormCreate(Sender: TObject);

begin

//Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π±ΡƒΠΊΠ² дисков

if GetDriveLetters(cboDrives.Items) > 0 then

begin

//Π’Ρ‹Π΄Π΅Π»ΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ диск

cboDrives.ItemIndex := 0;

cboDrivesSelect(self);

end

else

Button1.Enabled := False;

end;

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ дисках происходит ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ Π±ΡƒΠΊΠ²Ρ‹ диска Π² спискС (листинг 4.9).

...

Листинг 4.9. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ дискС

procedure TForm1.cboDrivesSelect(Sender: TObject);

var info: DriveInfo;

root: String;

fullSize, freeSize: Int64;

begin

root := cboDrives.Items[cboDrives.ItemIndex];

//Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ дискС

GetDriveInformation(root, info);

//ΠžΠ±Ρ‰Π°Ρ информация ΠΎ дискС ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС

txtLabel.Text := info.DriveLabel;

txtDriveType.Text := GetDriveTypeName(root);

txtFSName.Text := info.FileSystemName;

txtSN.Text := IntToHex(Int64(info.SerialNumber), 8);

txtMaxFileName.Text := IntToStr(Integer(info.MaxFileNameLen));

//Π€Π»Π°ΠΆΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойств Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы

chkCaseSensitive.Checked := info.FileSystemOptions.CaseSensitive;

chkCompression.Checked := info.FileSystemOptions.SupportCompression;

chkCompressed.Checked := info.FileSystemOptions.IsCompressed;

//Π Π°Π·ΠΌΠ΅Ρ€ диска

fullSize := GetDriveSize(root);

if fullSize <> β€“1 then

freeSize := GetDriveFreeSpace(root)

else

begin //Ошибка ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ диску

fullSize := 0;

freeSize := 0;

end;

//..Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹

driveSize.Series[0].Clear;

driveSize.Series[0].Add( freeSize, \'Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎ\');

driveSize.Series[0].Add( fullSize – freeSize, \'Занято\')

end;

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ производится ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Π² спискС диску ΠΌΠ΅Ρ‚ΠΊΡƒ, Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ тСкстовоС ΠΏΠΎΠ»Π΅ (txtLabel) (листинг 4.10).

...

Листинг 4.10.

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ диска

procedure TForm1.Button1Click(Sender: TObject);

begin

//ИзмСнСниС ΠΌΠ΅Ρ‚ΠΊΠΈ диска

if not SetDriveLabel(cboDrives.Items[cboDrives.ItemIndex],

txtLabel.Text)

then

MessageBox(self.Handle, \'НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ диска\',

\'Ошибка\', MB_ICONEXCLAMATION)

else

//ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ дискС

cboDrivesSelect(self);

end;

Π’Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ описаниС свойств элСмСнтов управлСния Π½Π΅ приводится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° элСмСнтов управлСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΈΠ΄Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠΉ Π² Π½ΠΈΡ…. Волько слСдуСт ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² элСмСнтС управлСния TChart создан ΠΎΠ΄ΠΈΠ½ ряд Ρ‚ΠΈΠΏΠ° Pie (круговая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°). Π£ этого ряда ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ подписСй ΠΊ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² Π»Π΅Π³Π΅Π½Π΄Π΅.

4.2. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΠΈ ΠΏΡƒΡ‚ΠΈ

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ располоТСниС Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ вопросы прСобразования ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ приводятся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², примСняСмыС для поиска.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, слСдуСт ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π° магичСскоС число, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅, цСлочислСнная константа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π»Π΅Π΅. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ константС МАΠ₯РАВН, Ρ€Π°Π²Π½ΠΎΠΉ 260. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ явно ΠΈΠ»ΠΈ нСявно (функциями API) Π² качСствС максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡƒΡ‚ΠΈ. Π—Π΄Π΅ΡΡŒ Π½Π°Π»ΠΈΡ†ΠΎ нСбольшой парадокс: хотя такая файловая систСма ΠΊΠ°ΠΊ FAT32, ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ получится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΄Π»ΠΈΠ½ΠΎΠΉ 255 символов.

...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈ доскональной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ получится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΄Π»ΠΈΠ½ΠΎΠΉ 255 символов Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ диска (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π‘: \). ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ имя Π΄Π»ΠΈΠ½ΠΎΠΉ максимум 244 символа. Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π΄Π»ΠΈΠ½Ρ‹ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ (получаСтся 247) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС систСма Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ 13 символов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ 8.3 (MS-DOS).

БистСмныС ΠΏΠ°ΠΏΠΊΠΈ WINDOWS ΠΈ system

ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π»ΠΈ Π²Π°ΠΌ Ρ…ΠΎΡ‚ΡŒ Ρ€Π°Π· ΠΏΠΈΡΠ°Ρ‚ΡŒ прилоТСния, Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависСла ΠΎΡ‚ располоТСния систСмных ΠΏΠ°ΠΏΠΎΠΊ Windows? Если Π΄Π°, Ρ‚ΠΎ Π²Ρ‹ навСрняка Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ нСустойчиво ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° WINDOWS всСгда C:\WIND0WS, a system всСгда C:\WINDOWS\system. Π’Π΅Π΄ΡŒ ΠΏΡ€ΠΈ установкС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° диск Π•:\, Π° ΠΏΠ°ΠΏΠΊΡƒ для Windows Π½Π°Π·Π²Π°Ρ‚ΡŒ Linux. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, систСмная ΠΏΠ°ΠΏΠΊΠ° Windows Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ NT ΠΈΠΌΠ΅Π΅Ρ‚ имя system32, ΠΈ ΠΊΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠ΅ имя ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии Windows. Π’ Ρ‚Π°ΠΊΠΈΡ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях Π²Ρ‹Ρ€ΡƒΡ‡Π°Ρ‚ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: GetWindowsDirectory ΠΈ GetSystemDirectory. Они ΠΎΠ±Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² строковый Π±ΡƒΡ„Π΅Ρ€ ΠΈ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ количСство символов, записанных Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€, ΠΈΠ»ΠΈ 0 Π² случаС ошибки.

Для этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ со стандартными для Delphi строками, Ρ‡Ρ‚ΠΎ, собствСнно, ΠΈ сдСлано ΠΏΡ€ΠΈ написании этой Π³Π»Π°Π²Ρ‹ (всС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ PathFunctions, располоТСнном Π½Π° дискС, ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌ ΠΊ ΠΊΠ½ΠΈΠ³Π΅, Π² ΠΏΠ°ΠΏΠΊΠ΅ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°). Π˜Ρ‚Π°ΠΊ, функция опрСдСлСния ΠΏΠ°ΠΏΠΊΠΈ Windows ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² листингС 4.11.

...

Листинг 4.11.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ WINDOWS

function GetWinDir(): String;

var

buffer: String;

len: UINT;

begin

SetLength(buffer, MAX_PATH + 1);

len := GetWindowsDirectory(PAnsiChar(buffer), MAX_PATH);

SetLength(buffer, len);

GetWinDir := buffer;

end;

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ рСализуСтся функция опрСдСлСния располоТСния систСмной ΠΏΠ°ΠΏΠΊΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСсто GetWindowsDirectory вызываСтся Ρ„yнкцияGetSystemDirectory.

ИмСна для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Для Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ хранСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² Windows прСдусмотрСна ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΏΠΊΠ° Temp. Π•Π΅ располоТСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… вСрсиях Windows (NT, 2000, Π₯Π ) мСстополоТСниС ΠΏΠ°ΠΏΠΊΠΈ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π˜Ρ‚Π°ΠΊ, располоТСниС ΠΏΠ°ΠΏΠΊΠΈ Temp ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ API-функция GetTempPath. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: строковый Π±ΡƒΡ„Π΅Ρ€ ΠΈ Π΄Π»ΠΈΠ½Ρƒ этого Π±ΡƒΡ„Π΅Ρ€Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство символов, записанных Π² ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ строку, ΠΈΠ»ΠΈ 0, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка. Ѐункция-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ со строковым Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², рСализуСтся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΄Π²ΡƒΠΌ Ρ€Π°Π½Π΅Π΅ рассмотрСнным функциям (листинг 4.12).