Выбрать главу

 il.DrawingStyle := dsTransparent;

 il.Masked := true;

 il.AddMasked(bm, clRed);

 il.Draw(Form1.Canvas, 0, 0, 0);

 bm.Free;

 il.Free;

end;

Вопрос:

Как заставить TMediaPlayer проигрывать одно и тоже бесконечно? AVI например?

Ответ:

В примере AVI файл проигрывается снова и снова — используем событие MediaPlayer'а Notify

Пример:

procedure TForm1.MediaPlayer1Notify(Sender: TObject);

begin

 with MediaPlayer1 do if NotifyValue = nvSuccessful then begin

  Notify := True;

  Play;

 end;

end;

Вопрос:

При выполнении диалога FontDialog со свойством Device равным fdBoth or fdPrinter, появляется ошибка "There are no fonts installed".

Ответ:

Эти установки должны показать шрифты совместимые либо с принтером либо с экраном. В примере диалог Windows ChooseFont вызывается напрямую чтобы показать список шрифтов, совместимых одновременно и с экраном и с принтером.

Пример:

uses Printers, CommDlg;

procedure TForm1.Button1Click(Sender: TObject);

var

 cf : TChooseFont;

 lf : TLogFont;

 tf : TFont;

begin

 if PrintDialog1.Execute then begin

  GetObject(Form1.Canvas.Font.Handle, sizeof(lf),@lf);

  FillChar(cf, sizeof(cf), #0);

  cf.lStructSize := sizeof(cf);

  cf.hWndOwner := Form1.Handle;

  cf.hdc := Printer.Handle;

  cf.lpLogFont := @lf;

  cf.iPointSize := Form1.Canvas.Font.Size * 10;

  cf.Flags := CF_BOTH or CF_INITTOLOGFONTSTRUCT or CF_EFFECTS or CF_SCALABLEONLY or CF_WYSIWYG;

  cf.rgbColors := Form1.Canvas.Font.Color;

  if ChooseFont(cf) <> false then begin

   tf := TFont.Create;

   tf.Handle := CreateFontIndirect(lf);

   tf.COlor := cf.RgbColors;

   Form1.Canvas.Font.Assign(tf);

   tf.Free;

   Form1.Canvas.TextOut(10, 10, 'Test');

  end;

 end;

end;

Вопрос:

Как сменить дисковод, откуда MediaPlayer проигрывает аудио CD?

Ответ:

См. пример.

Пример:

MediaPlayer1.FileName := 'E:';

Вопрос:

Как убрать кнопку с названием моей программы из Панели Задач(Taskbar)?

Ответ:

Отредактируйте файл-проекта (View→Project Source). Добавьте модуль Windows в раздел uses. Application.ShowMainForm := False; в строку после "Application.Initialize;". Добавьте ShowWindow(Application.Handle, SW_HIDE); в строку перед "Application.Run;"

Ваш файл проекта должен выглядеть приблизительно так:

program Project1;

uses Windows, Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin

 Application.Initialize;

 Application.ShowMainForm := False;

 Application.CreateForm(TForm1, Form1);

 Application.CreateForm(TForm2, Form2);

 ShowWindow(Application.Handle, SW_HIDE);

 Application.Run;

end.

В разделе "initialization" (в самом низу) каждого unit'а добавьте

begin

 ShowWindow(Application.Handle, SW_HIDE);

end.

Вопрос:

Как преобразовать цвета в строку — название цвета VCL?

Ответ:

Модуль graphics.pas содержит функцию ColorToString() которое преобразует допустимое значение TColor в его строковое представление используя либо константу — название цвета (по возможности) либо шестнадцатиричную строку. Обратная функция — StringToColor()

Пример:

procedure TForm1.Button1Click(Sender: TObject);

begin

 Memo1.Lines.Add(ColorToString(clRed));

 Memo1.Lines.Add(IntToStr(StringToColor('clRed')));

end;

Вопрос:

При показе максимизированной формы она перекрывает task bar и не выравнивается по верху экрана. В чем тут дело?

Ответ:

Это может произойти когда свойство position формы установленно в poScreenCenter. Установите position = poDefault.

Вопрос:

Как заставить TEdit не 'пикать' при нажатии недопустимых клавиш?

Ответ:

Перехватите событие KeyPress и установите key = #0 для недопустимых клавиш.

Пример:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

 if ((UpCase(Key) < 'A') or (UpCase(Key) > 'Z')) then Key := #0;

end;

Вопрос:

Как получить число и список всех компонентов, расположенных на TNoteBook?

Ответ:

В примере список выводится на Listbox.

Пример:

procedure TForm1.Button1Click(Sender: TObject);

var

 n: integer;

 p: integer;

begin

 ListBox1.Clear;

 with Notebook1 do begin

  for n := 0 to ControlCount - 1 do begin

   with TPage(Controls[n]) do begin

    ListBox1.Items.Add('Notebook Page: ' + TPage(Notebook1.Controls[n]).Caption);

    for p := 0 to ControlCount - 1 do ListBox1.Items.Add(Controls[p].Name);

    ListBox1.Items.Add(EmptyStr);

   end;

  end;

 end;

end;

Вопрос:

Я хочу вставить escape code в строку при использовании функции Format(). Например, я хочу создать строку, содержащую символ табуляции. В "C" я бы написал что-то вроде sprintf(buffer, "%s\t%s", str);. А как это будет на Pascal'e?

Ответ:

Функция Format Pascal'я не использует escape codes. Вместо этого нужно вставить в строку действительное значение символа в кодировке ASCII.

Пример:

Buffer := Format('%s'#9'%s', [Str1, Str2]);

ShowMessage(Format('%s'#9'%s', ['Column1', 'Column2']));

Вопрос:

Как показать первый кадр AVI-файла?

Ответ:

См. пример.

Пример:

procedure TForm1.Button1Click(Sender: TObject);

begin

 Application.ProcessMessages;

 MediaPlayer1.Open;

 Application.ProcessMessages;

 MediaPlayer1.Step;

 Application.ProcessMessages;

 MediaPlayer1.Previous;

end;

Вопрос:

Когда пользователь щелкает по listview, он переходит в режим редактирования. Как перевести его в режим редактирования по нажатию клавиши (например F2)?