FAQ VCL
Разное

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: 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;

При использовании материала - ссылка на сайт обязательна