:: 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;
|
При использовании материала - ссылка на сайт обязательна
|
|