Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.008 c
15-1258475407
толстенький
2009-11-17 19:30
2010.01.17
finger trees


15-1258234214
Юрий
2009-11-15 00:30
2010.01.17
С днем рождения ! 15 ноября 2009 воскресенье


2-1258959429
Alex_C
2009-11-23 09:57
2010.01.17
Правильно "заморозить" TThread


15-1257529216
Kolan
2009-11-06 20:40
2010.01.17
А как добавить tags, branches и trunc в уже существующий svn?


2-1258818660
Wito
2009-11-21 18:51
2010.01.17
Рекурсивный обход дерева





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский