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

Unknown

uses CommCtrl, ComCtrls;

type TMyTrackBar = class(TTrackBar)

 procedure CreateParams(var Params: TCreateParams); override;

end;

procedure TMyTrackBar.CreateParams(var Params: TCreateParams);

begin

 inherited;

 Params.Style := Params.Style and not TBS_ENABLESELRANGE;

end;

var MyTrackbar : TMyTrackbar;

procedure TForm1.Button1Click(Sender: TObject);

begin

 MyTrackBar := TMyTrackbar.Create(Form1);

 MyTrackbar.Parent := Form1;

 MyTrackbar.Left := 100;

 MyTrackbar.Top := 100;

 MyTrackbar.Width := 150;

 MyTrackbar.Height := 45;

 MyTrackBar.Visible := true;

end;

Вопрос:

Мне нужен временный canvas, но когда я пытаюсь его создать получаю сообщения об ошибках. Как создать TCanvas?

Ответ:

Создайте Bitmap и используйте свойство canvas класса TBitmap. Пример создает Bitmap, рисует на его canvas'е, выводит этот canvas на форму и освобождает bitmap.

Пример:

procedure TForm1.Button1Click(Sender: TObject);

var bm : TBitmap;

begin

 bm := TBitmap.Create;

 bm.Width := 100;

 bm.Height := 100;

 bm.Canvas.Brush.Color := clRed;

 bm.Canvas.FillRect(Rect(0, 0, 100, 100));

 bm.Canvas.MoveTo(0, 0);

 bm.Canvas.LineTo(100, 100);

 Form1.Canvas.StretchDraw(Form1.ClientRect,Bm);

 bm.Free;

end;

Вопрос:

В некоторых видео режимах прозрачная часть glyph'а стандартного TBitBtn становится видной. Как этого избежать?

Ответ:

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

Пример:

function InitStdBitBtn(BitBtn : TBitBtn; kind : TBitBtnKind) : bool;

var

 Bm1 : TBitmap;

 Bm2 : TBitmap;

begin

 Result := false;

 if Kind = bkCustom then exit;

 Bm1 := TBitmap.Create;

 case Kind of

 bkOK : Bm1.Handle := LoadBitmap(hInstance, 'BBOK');

 bkCancel : Bm1.Handle := LoadBitmap(hInstance, 'BBCANCEL');

 bkHelp : Bm1.Handle := LoadBitmap(hInstance, 'BBHELP');

 bkYes : Bm1.Handle := LoadBitmap(hInstance, 'BBYES');

 bkNo : Bm1.Handle := LoadBitmap(hInstance, 'BBNO');

 bkClose : Bm1.Handle := LoadBitmap(hInstance, 'BBCLOSE');

 bkAbort : Bm1.Handle := LoadBitmap(hInstance, 'BBABORT');

 bkRetry : Bm1.Handle := LoadBitmap(hInstance, 'BBRETRY');

 bkIgnore : Bm1.Handle := LoadBitmap(hInstance, 'BBIGNORE');

 bkAll : Bm1.Handle := LoadBitmap(hInstance, 'BBALL');

 end;

 Bm2 := TBitmap.Create;

 Bm2.Width := Bm1.Width;

 Bm2.Height := Bm1.Height;

 Bm2.Canvas.Brush.Color := ClBtnFace;

 Bm2.Canvas.BrushCopy(Rect(0, 0, bm2.Width, bm2.Height), Bm1, Rect(0, 0, Bm1.width, Bm1.Height), Bm1.canvas.pixels[0,0]);

 Bm1.Free;

 LockWindowUpdate(BitBtn.Parent.Handle);

 BitBtn.Kind := kind;