Главная страница
    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.041 c
2-1156757046
Rubey
2006-08-28 13:24
2006.09.17
Форма с заставкой


8-1135860481
Cr@zy-EyE
2005-12-29 15:48
2006.09.17
Не запускается Direct3d


3-1152870911
syte_ser78
2006-07-14 13:55
2006.09.17
Колво видимых столбцов ДБГрида


1-1154879824
Vazelin
2006-08-06 19:57
2006.09.17
перехват закрытия окна


2-1156414447
123321
2006-08-24 14:14
2006.09.17
BinToHex





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский