Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

Override процедуры Paint   Найти похожие ветки 

 
Creative   (2006-02-07 17:29) [0]

Есть компонента TSquare(TCustomControl);
Хочется:
1. Чтобы на форме в момент работы приложения она выглядела как TShape, то есть закрашенным квадратом без рамки.
2. Чтобы в момент создания или рисования компоненты (не знаю как правильно) программа смотрела на значения некоторых полей компоненты и сообразно им рисовала на форме линии.
Например так
if Face = fcTop then
  begin
    moveto(left, top);
    lineto(left+width, top-height);
  end;


Как правильно должна в таком случае выглядеть процедура Paint? На данный момент она выглядит так:

procedure TSquare.Paint;
var
 Save: Boolean;
begin
 if csDesigning in ComponentState then
with inherited Canvas do
begin
  Pen.Style := psDash;
  Brush.Style := bsClear;
  Rectangle(0, 0, Width, Height);
end;
 Save := FDrawing;
 FDrawing := True;
 try
with inherited Canvas do
  StretchDraw(DestRect, Picture.Graphic);
 finally
FDrawing := Save;
 end;
end;

Максимум чего мне удалось добиться - чтобы на форме рисовался белый квадрат, но он все равно рисуется с черной рамкой вокруг.
Я ЗНАЮ, что неправильно, но хочу понять как правильно.


 
MBo ©   (2006-02-07 18:06) [1]

>рисуется с черной рамкой вокруг.
хм... хочешь закрасит - а кисть прозрачной делаешь...
Pen psNone сделай, а кисти цвет придай, или вообще используй FillRect

Кстати, зачем у Canvas - inherited?


 
XProger ©   (2006-02-07 18:43) [2]

Если на форме, то что-то вроде: with (Parent as TForm) do Canvas.рисуем

Pen.Color := цвет_рамки
Brush.Color := цвет_заливки


 
Creative   (2006-02-08 10:51) [3]

MBo: inherited Canvas это списанная из описания TCustomControl процедура Paint. Я слишком мало знаю, чтобе переделывать готовый процедуры готовых компонентов.

XProger: в том то все и дело, что просто поменять цвет заливки и рамки я могу, а вот заставить его при прорисовке рисовать еще что то, да еще и смотреть в условия, которые я ему ставлю - не получается.


 
ЮЮ ©   (2006-02-08 11:27) [4]


> программа смотрела на значения некоторых полей компоненты
> и сообразно им рисовала на форме линии.


А посмотреть, как это сделано в том же TShape, религия не позвроляет?
Не поля, а свойства, а в методе установки свойства вызвать обновление отрисовки:

procedure TShape.SetShape(Value: TShapeType);
begin
 if FShape <> Value then
 begin
   FShape := Value;
  Invalidate;
 end;
end;


 
Creative   (2006-02-08 12:14) [5]

ЮЮ:
Не сочтите за нахальство, а можно попонятней?
На всякий случай: мне нужно чтобы программа читала вот это свойство:
property RightSide: TSide read FRightSide write FRightSide;
оно может принимать значения:
TSide = (sdWall, sdBrWall, sdDoor, sdNone);

Действие должно быть приблизительно такое:
if RightSide = sdWall then
  begin
   moveto(left, top);
   lineto(left+width, top-height);
  end;


 
Creative   (2006-02-08 12:25) [6]

Я написала аналогичную процедуру для моего свойства, но компилятор ее почему то пропускает


 
Creative   (2006-02-08 13:55) [7]

Следующий симптом - после написания SetMyProperty, Дельфи при наличии в проекте этой компоненты стал виснуть почем зря и выдавать access violation в модуле с расширением .bpl. Кто нибудь сталкивался с таким уже?


 
Creative   (2006-02-08 17:09) [8]

Спасибо всем за советы, все получилось



Страницы: 1 вся ветка

Форум: "Компоненты";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
15-1156626983
Button1
2006-08-27 01:16
2006.09.17
Подскажите кнопку, которая бы фиксировалась в нажатом состоянии?


10-1123487125
Roman-620
2005-08-08 11:45
2006.09.17
Stack overflow


2-1157087948
Neket
2006-09-01 09:19
2006.09.17
обработка ошибок в Query


15-1156945347
vecna
2006-08-30 17:42
2006.09.17
Mazda vs Focus


15-1156836324
dom2
2006-08-29 11:25
2006.09.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский