![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Canvas, Brush.Color,FillRect. [D6, XP]
Drowsy © (2009-11-19 15:16:00)Почему в данном случае при отрисовке LeftSide и RightSide линии рисуются установленным цветом карандаша, а FillRect цветом кисти фона?
type
GrSidePro = class(TPaintBox)
private
procedure Show(Sender: TObject);
published
public
end;
grProlet = class (TComponent)
LeftSide : GrSidePro;
RightSide : GrSidePro;
private
end;
implementation
....
....
constructor grProlet.CreateR(AOwner: TWinControl ; ProletsList : TList; var PRol : TProlet; Colwid : double);
begin
inherited Create(AOwner);
...
...
LeftSide := GrSidePro.Create(Self);
LeftSide.Parent := AOwner;
RightSide := GrSidePro.Create(Self);
RightSide.Parent := AOwner;
...
...
LeftSide.Canvas.Pen.Color := clRed;
LeftSide.Canvas.Brush.Color := clGreen;
LeftSide.OnPaint := LeftSide.Show;
RightSide.Canvas.Pen.Color := clYellow;
RightSide.Canvas.Brush.Color := clBlue;
RightSide.OnPaint := RightSide.Show;
end;
procedure GrSidePro.Show(Sender: TObject);
begin
with Canvas do
begin
FillRect(ClientRect);
MoveTo(0, 0);
LineTo(0, ClientHeight);
MoveTo(ClientWidth-1, 0);
LineTo(ClientWidth-1, ClientHeight);
end;
end;
Cobalt (2009-11-20 14:48:00) [1]Лучше использовать для отладки не ShowMessage, а
OutputDebugString(PChar(IntToHex(Color, 8)));
Омлет (2009-11-19 16:52:00) [2]Где-то косяк. Возможно переопределение цвета..
Перед FillRect поставьте ShowMessage, чтобы узнать истинный номер цвета кисти.
Игорь Шевченко (2009-11-19 16:49:00) [3]Ищи разницу:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TFoo = class(TPaintBox)
private
FBkColor: TColor;
protected
procedure Paint; override;
public
property BkColor: TColor read FBkColor write FBkColor;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FFoo, FBar: TFoo;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FFoo := TFoo.Create(Self);
FFoo.Parent := Self;
FFoo.BoundsRect := Rect(10, 10, 100, 100);
FFoo.BkColor := clRed;
FBar := TFoo.Create(Self);
FBar.Parent := Self;
FBar.BoundsRect := Rect(110, 110, 200, 200);
FBar.BkColor := clBlue;
end;
{ TFoo }
procedure TFoo.Paint;
begin
with Canvas do
begin
Brush.Color := FBKColor;
FillRect(ClientRect);
end;
end;
end.
Drowsy (2009-11-19 16:40:00) [4]
> А Brush.Style какой?
bsSolid
Омлет (2009-11-19 16:37:00) [5]А Brush.Style какой?
Drowsy (2009-11-19 16:27:00) [6]
> PaintBox использует Form.Canvas, значит, последние установки
> и будут использоваться при рисовании
У меня только главная форма.
Попробовал так:
procedure GrSidePro.Show(Sender: TObject);
var LH, RH : integer;
begin
with Canvas do
begin
Application.MainForm.Canvas.Brush.Color := clRed;
FillRect(ClientRect);
Всё равно цветом фона заливает.
Drowsy (2009-11-19 16:22:00) [7]
> PaintBox использует Form.Canvas, значит, последние установки
> и будут использоваться при рисовании
A TImage тоже использует Form.Canvas?
Игорь Шевченко (2009-11-19 16:03:00) [8]или устанавливай атрибуты Canvas непосредственно в методе OnPaint
Игорь Шевченко (2009-11-19 16:02:00) [9]Drowsy (19.11.09 15:58) [10]
PaintBox использует Form.Canvas, значит, последние установки и будут использоваться при рисовании
RTFM: TCustomControl
Drowsy (2009-11-19 16:01:00) [10]и карандаш-то цвет сохраняет.
Drowsy (2009-11-19 16:00:00) [11]а при определении:
LeftSide.Canvas.Brush.Color := clGreen;
RightSide.Canvas.Brush.Color := clBlue;
Drowsy (2009-11-19 15:58:00) [12]
> потому что Canvas чужой
не понимаю.
я ведь явно указываю:
procedure GrSidePro.Show(Sender: TObject);
begin
with Canvas do
begin
FillRect(ClientRect);
Игорь Шевченко (2009-11-19 15:56:00) [13]потому что Canvas чужой
Drowsy (2009-11-19 15:52:00) [14]установил в false.
LeftSide := GrSidePro.Create(Self);
LeftSide.Parent := AOwner;
LeftSide.ParentColor := false;
RightSide := GrSidePro.Create(Self);
RightSide.Parent := AOwner;
RightSide.ParentColor := false;
рисует как прежде.
Германн (2009-11-19 15:42:00) [15]ParentColor?
Drowsy (2009-11-19 15:36:00) [16]Почему в данном случае при отрисовке LeftSide и RightSide линии рисуются установленным цветом карандаша, а FillRect цветом кисти фона а не цветом кисти, установленным для LeftSide и RightSide
antonn (2009-11-19 15:33:00) [17]ты вопрос переформулируй, т.к. вот тут все уже рассказано:
> Почему в данном случае при отрисовке LeftSide и RightSide
> линиирисуются установленным цветом карандаша, а FillRect
> цветом кисти фона?
>
Drowsy (2009-11-19 15:23:00) [18]
> потому что линии рисуются через pen, а fillrect заливается
> используя brush
LeftSide.Canvas.Pen.Color := clRed;
LeftSide.Canvas.Brush.Color := clGreen;
LeftSide.OnPaint := LeftSide.Show;
RightSide.Canvas.Pen.Color := clYellow;
RightSide.Canvas.Brush.Color := clBlue;
RightSide.OnPaint := RightSide.Show;
Drowsy (2009-11-19 15:22:00) [19]по определению чего?
antonn (2009-11-19 15:22:00) [20]
> Почему в данном случае при отрисовке LeftSide и RightSide
> линии рисуются установленным цветом карандаша, а FillRect
> цветом кисти фона?
потому что линии рисуются через pen, а fillrect заливается используя brush