|
:: MVP ::
|
|
|
:: RSS ::
|
|
|
Как получить путь к установленному VLC-плееру (с учетом разрядности приложения)?
function GetVLCLibPath: string;
var
Handle: HKEY;
RegType: Integer;
DataSize: Cardinal;
Key: PWideChar;
begin
Result := '';
Key := 'Software\VideoLAN\VLC';
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, Handle) = ERROR_SUCCESS then
begin
if RegQueryValueEx(Handle, 'InstallDir', nil, @RegType, nil, @DataSize) = ERROR_SUCCESS then
begin
SetLength(Result, DataSize);
RegQueryValueEx(Handle, 'InstallDir', nil, @RegType, PByte(@Result[1]), @DataSize);
Result[DataSize] := '\';
end
else Showmessage('Error on reading registry');
RegCloseKey(Handle);
Result := String(PChar(Result));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetVLCLibPath);
end;
|
Как быстро отсортировать массив целых чисел?
type
TIntArray = array of Integer;
var
IntArray: TIntArray = [2, 7, 1, 4, 0, 8, 5, 9, 4, 3];
procedure qSort(var A: TIntArray; min, max: Integer);
var
i, j, tmp, supp: Integer;
begin
supp := A[max-((max-min) div 2)];
i := min;
j := max;
while i < j do
begin
while A[i] < supp do
i := i + 1;
while A[j] > supp do
j := j - 1;
if i <= j then
begin
tmp := A[i];
A[i] := A[j];
A[j] := tmp;
i := i + 1;
j := j - 1;
end;
end;
if min < j then
qSort(A, min, j);
if i < max then
qSort(A, i, max);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
i: Integer;
begin
qSort(IntArray, 0, High(IntArray));
s := '';
for i := Low(IntArray) to High(IntArray) do
s := s + IntToStr(IntArray[i]) + #13;
ShowMessage(s);
end;
|
Как определить передан ли программе определенный параметр или нет?
procedure TestFindCmdLineSwitch;
var
schars: TSysCharSet;
begin
schars := ['/','.'];
if FindCmdLineSwicth('param1') then
begin
// определит "/param1", "/PARAM1"
// не определит "param1", ".param1"
end;
if FindCmdLineSwitch('param1', False) then
begin
// определит "/param1"
// не определит "param1", ".param1", "/PARAM1"
end;
if FindCmdLineSwitch('param1', schars, false) then
begin
// определит "/param1", ".param1"
// не определит "param1", "/PARAM1"
end;
end;
|
Как использовать TParallel.For?
// Способ первый
uses
System.Threading;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
// Для безопасной модификации сложных типов данных, таких как строки,
// из разных потоков необходимо использовать средства синхрогизации,
// такие как TCriticalSection или TMonitor
TParallel.For(1, 100,
procedure(i: Integer)
begin
// System.TMonitor.Enter(Self);
// try
TThread.Queue(TThread.Current,
procedure
begin
Memo1.Lines.Add(i.ToString);
end
);
// finally
// System.TMonitor.Exit(Self);
// end;
end
);
end;
// Способ второй
uses
System.Threading{, System.SyncObjs};
procedure TForm1.Button1Click(Sender: TObject);
// var
// Lock: TCriticalSection;
begin
Memo1.Lines.Clear;
// Для безопасной модификации сложных типов данных, таких как строки,
// из разных потоков необходимо использовать средства синхрогизации,
// такие как TCriticalSection или TMonitor
// Lock := TCriticalSection.Create;
// try
TParallel.For(1, 100,
procedure(i: Integer)
begin
// Lock.Enter;
// try
TThread.Queue(TThread.Current,
procedure
begin
Memo1.Lines.Add(i.ToString);
end
);
// finally
// Lock.Leave;
// end;
end
);
// finally
// Lock.Free;
// end;
end;
|
Как объявить переменную в теле метода?
procedure TForm1.Button1Click(Sender: TObject);
begin
// Стало доступно с Delphi 12
var i := 0;
for var j := 0 to 10 do
Inc(i, j);
ShowMessage(i.ToString);
end;
|
Как использовать оператор "is not"?
procedure TForm1.Button1Click(Sender: TObject);
begin
// Стало доступно с Delphi 13
// Классический синтаксис
if not (Sender is TForm) then
ShowMessage('Это не форма');
// Новый синтаксис
if Sender is not TForm then
ShowMessage('Это не форма');
end;
|
Как объявить переменную в теле метода?
procedure TForm1.Button1Click(Sender: TObject);
type
TSide = (sLeft, sRight, sTop, sBottom);
var
side: TSide;
begin
// Стало доступно с Delphi 13
side := sTop;
// Классический синтаксис
if not (side in [sLeft, sRight]) then
ShowMessage('Это не боковая грань');
// Новый синтаксис
if side not in [sLeft, sRight] then
ShowMessage('Это не боковая грань');
end;
|
Как использовать тернарный оператор?
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
flag: Boolean;
begin
flag := Boolean(Random(2));
// классический синтаксис
if flag then
ShowMessage('Истина')
else
ShowMessage('Ложь');
// Новый синтаксис
s := if flag then 'Истина' else 'Ложь';
ShowMessage(s);
ShowMessage(if flag then 'Истина' else 'Ложь');
end;
|
|
При использовании материала - ссылка на сайт обязательна
|
|