Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.17;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
1-1223992986
Kolan
2008-10-14 18:03
2010.01.17
Как «поймать» событие активизации формы.


2-1258981498
mefodiy
2009-11-23 16:04
2010.01.17
Удаленное подключение


4-1226584066
CodeMaster
2008-11-13 16:47
2010.01.17
API функция для изменения шрифта TextOut


2-1258523471
Tornado
2009-11-18 08:51
2010.01.17
Обработать ошибку пинга


15-1258203058
TRSteep
2009-11-14 15:50
2010.01.17
Сетевея работа