Виртуальная библиотека Delphi - [82]

Шрифт
Интервал

> Bm1.Free;

> LockWindowUpdate(BitBtn.Parent.Handle);

> BitBtn.Kind := kind;

> BitBtn.Glyph.Assign(bm2);

> LockWindowUpdate(0);

> Bm2.Free;

> Result := true;

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>begin

> InitStdBitBtn(BitBtn1, bkOk);

>end;


Вопрос:

Создание PolyPolygon используя массив точек?

Ответ:

Polygon — метод компонента TCanvas получает в качестве параметра динамический массив точек. Функция PolyPolygon() из Windows GDI получает указатель на массив точек.

Пример:

>procedure TForm1.Button1Click(Sender: TObject);

>var

> ptArray : array[0..9] of TPOINT;

> PtCounts : array[0..1] of integer;

>begin

> PtArray[0] := Point(0, 0);

> PtArray[1] := Point(0, 100);

> PtArray[2] := Point(100, 100);

> PtArray[3] := Point(100, 0);

> PtArray[4] := Point(0, 0);

> PtCounts[0] := 5;

> PtArray[5] := Point(25, 25);

> PtArray[6] := Point(25, 75);

> PtArray[7] := Point(75, 75);

> PtArray[8] := Point(75, 25);

> PtArray[9] := Point(25, 25);

> PtCounts[1] := 5;

> PolyPolygon(Form1.Canvas.Handle, PtArray,PtCounts,2);

>end;


Вопрос:

Как создать невизуальный компонент без иконки, которая изображается в палитре компонентов в "design-time" (вроде TField)?

Ответ:

Невизуальные компоненты без иконки удобны для субкомпонентов, связанных с какими-то другими компонентами. Создайте компонент как обычно, но используйте RegisterNoIcon вместо RegisterComponent.


Вопрос:

Как показывать нестандартный встроенный редактор (inplace editor) в ячейке stringgrid (например combobox).

Ответ:

См. пример

Пример:

>procedure TForm1.FormCreate(Sender: TObject);

>begin

> {Высоту combobox'а не изменишь, так что вместо combobox'а будем изменять высоту строки grid'а !}

> StringGrid1.DefaultRowHeight := ComboBox1.Height;

> {Спрятать combobox}

> ComboBox1.Visible := False;

> ComboBox1.Items.Add('Delphi Kingdom');

> ComboBox1.Items.Add('Королевство Дельфи');

>end;


>procedure TForm1.ComboBox1Change(Sender: TObject);

>begin

> {Перебросим выбранное в значение из ComboBox в grid}

> StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] :=ComboBox1.Items[ComboBox1.ItemIndex];

> ComboBox1.Visible := False;

> StringGrid1.SetFocus;

>end;


>procedure TForm1.ComboBox1Exit(Sender: TObject);

>begin

> {Перебросим выбранное в значение из ComboBox в grid}

> StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] :=ComboBox1.Items[ComboBox1.ItemIndex];

> ComboBox1.Visible := False;

> StringGrid1.SetFocus;

>end;


>procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);

>var R: TRect;

>begin

> if ((ACol = 3) AND (ARow <> 0)) then begin

>  {Ширина и положение ComboBox должно соответствовать ячейке StringGrid}

>  R := StringGrid1.CellRect(ACol, ARow);

>  R.Left := R.Left + StringGrid1.Left;

>  R.Right := R.Right + StringGrid1.Left;

>  R.Top := R.Top + StringGrid1.Top;

>  R.Bottom := R.Bottom + StringGrid1.Top;

>  ComboBox1.Left := R.Left + 1;

>  ComboBox1.Top := R.Top + 1;

>  ComboBox1.Width := (R.Right + 1) - R.Left;

>  ComboBox1.Height := (R.Bottom + 1) - R.Top;

>  {Покажем combobox}

>  ComboBox1.Visible := True;

>  ComboBox1.SetFocus;

> end;

> CanSelect := True;

>end;


Вопрос:

Как узнать есть ли в заданном CD-ROM'е Audio CD?

Ответ:

Можно использовать функцию Windows API GetDriveType() чтобы определить является ли дисковод CD-ROM'мом. И функцию API GetVolumeInformation() чтобы проверить VolumeName на равенство 'Audio CD'.

Пример:

>function IsAudioCD(Drive : char) : bool;

>var

> DrivePath : string;

> MaximumComponentLength : DWORD;

> FileSystemFlags : DWORD;

> VolumeName : string;

>Begin

> result := false;

> DrivePath := Drive + ':\';

> if GetDriveType(PChar(DrivePath)) <> DRIVE_CDROM then exit;

> SetLength(VolumeName, 64);

> GetVolumeInformation(PChar(DrivePath),PChar(VolumeName), Length(VolumeName),nil,MaximumComponentLength,FileSystemFlags,nil,0);

> if lStrCmp(PChar(VolumeName),'Audio CD') = 0 then result := true;

>end;


>function PlayAudioCD(Drive : char) : bool;

>var mp : TMediaPlayer;

>begin

> result := false;

> Application.ProcessMessages;

> if not IsAudioCD(Drive) then exit;

> mp := TMediaPlayer.Create(nil);

> mp.Visible := false;

> mp.Parent := Application.MainForm;

> mp.Shareable := true;

> mp.DeviceType := dtCDAudio;

> mp.FileName := Drive + ':';

> mp.Shareable := true;

> mp.Open;

> Application.ProcessMessages;

> mp.Play;

> Application.ProcessMessages;

> mp.Close;

> Application.ProcessMessages;

> mp.free;

> result := true;

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>begin

> if not PlayAudioCD('D') then ShowMessage('Not an Audio CD');

>end;


Вопрос:

Как узнать есть ли у мыши колесико?

Ответ:

Свойство "WheelPresent" глобального обьекта "mouse". 


Вопрос:

События KeyPress и KeyDown не вызываются для клавиши Tab — как определить, что она была нажата?

Ответ:

На уровне формы клавиша tab обычно обрабатывается Windows. В примере создается обработчик события CM_Dialog для перехвата Dialog keys.

Пример:

>type TForm1 = class(TForm)

>private

> procedure CMDialogKey( Var msg: TCMDialogKey ); message CM_DIALOGKEY;

>end;

>var Form1: TForm1;


>implementation

>{$R *.DFM}


>procedure TForm1.CMDialogKey(var msg: TCMDialogKey);

>begin

> if msg.Charcode <> VK_TAB then inherited;

>end;


>procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);


Еще от автора Неизвестный Автор
Галчонок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Призраки ночи

В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.


Закат  вечности

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 131, Победа

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.



DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.