Форум: "Компоненты";
Текущий архив: 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