Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
ВнизCanvas, Brush.Color,FillRect. Найти похожие ветки
← →
Drowsy (2009-11-19 15:16) [0]Почему в данном случае при отрисовке 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;
← →
Германн © (2009-11-19 15:21) [1]
> Почему в данном случае при отрисовке LeftSide и RightSide
> линии рисуются установленным цветом карандаша, а FillRect
> цветом кисти фона?
По определению.
← →
antonn © (2009-11-19 15:22) [2]
> Почему в данном случае при отрисовке LeftSide и RightSide
> линии рисуются установленным цветом карандаша, а FillRect
> цветом кисти фона?
потому что линии рисуются через pen, а fillrect заливается используя brush
← →
Drowsy (2009-11-19 15:22) [3]по определению чего?
← →
Drowsy (2009-11-19 15:23) [4]
> потому что линии рисуются через 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;
← →
antonn © (2009-11-19 15:33) [5]ты вопрос переформулируй, т.к. вот тут все уже рассказано:
> Почему в данном случае при отрисовке LeftSide и RightSide
> линии рисуются установленным цветом карандаша, а FillRect
> цветом кисти фона?
>
← →
Drowsy (2009-11-19 15:36) [6]Почему в данном случае при отрисовке LeftSide и RightSide линии рисуются установленным цветом карандаша, а FillRect цветом кисти фона а не цветом кисти, установленным для LeftSide и RightSide
← →
Германн © (2009-11-19 15:42) [7]ParentColor?
← →
Drowsy (2009-11-19 15:52) [8]установил в 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:56) [9]потому что Canvas чужой
← →
Drowsy (2009-11-19 15:58) [10]
> потому что Canvas чужой
не понимаю.
я ведь явно указываю:
procedure GrSidePro.Show(Sender: TObject);
begin
with Canvas do
begin
FillRect(ClientRect);
← →
Drowsy (2009-11-19 16:00) [11]а при определении:
LeftSide.Canvas.Brush.Color := clGreen;
RightSide.Canvas.Brush.Color := clBlue;
← →
Drowsy (2009-11-19 16:01) [12]и карандаш-то цвет сохраняет.
← →
Игорь Шевченко © (2009-11-19 16:02) [13]Drowsy (19.11.09 15:58) [10]
PaintBox использует Form.Canvas, значит, последние установки и будут использоваться при рисовании
RTFM: TCustomControl
← →
Игорь Шевченко © (2009-11-19 16:03) [14]или устанавливай атрибуты Canvas непосредственно в методе OnPaint
← →
Drowsy (2009-11-19 16:22) [15]
> PaintBox использует Form.Canvas, значит, последние установки
> и будут использоваться при рисовании
A TImage тоже использует Form.Canvas?
← →
Drowsy (2009-11-19 16:27) [16]
> 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);
Всё равно цветом фона заливает.
← →
Омлет © (2009-11-19 16:37) [17]А Brush.Style какой?
← →
Drowsy (2009-11-19 16:40) [18]
> А Brush.Style какой?
bsSolid
← →
Игорь Шевченко © (2009-11-19 16:49) [19]Ищи разницу:
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.
← →
Омлет © (2009-11-19 16:52) [20]Где-то косяк. Возможно переопределение цвета..
Перед FillRect поставьте ShowMessage, чтобы узнать истинный номер цвета кисти.
← →
Cobalt © (2009-11-20 14:48) [21]Лучше использовать для отладки не ShowMessage, а
OutputDebugString(PChar(IntToHex(Color, 8)));
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c