Читать «Виртуальная библиотека Delphi» онлайн - страница 157

Unknown

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