|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Непонятка с Canvas у TShape
Мужики, есть одна небольшная проблема, даже сказать, головная боль.
есть O: TShape; Создаю экземпляр. Пытаюсь вывести текст при помощи Canvas.TextOut(0,0,'123456'); При первой попытке всё выводится. Потом... Изменяю размер при помощи Width := 200; пытаюсь вывести текст ещё раз - уже не получается. Причём видно, что он прорисовывается, но мельком, почти незаметно, потом исчезает. Вот код: var O: TShape; procedure TForm1.CreateObj; begin O := TShape.Create(Self); O.Parent := Form1; O.Visible := True; end; procedure TForm1.DelObj; begin O.Free; end; procedure TForm1.DrawText1; begin O.Canvas.TextOut(0,0,'12345'); end; {пока что всё нормально} procedure TForm1.DrawText2; begin O.Width := 200; O.Height := 200; O.Canvas.TextOut(0,30,'67890'); //Invalidate; //Refresh; //Canvas.Refresh; end; {теперь нет ни первой ни второй надписи} Пробывал в DrawText2 в конце ставить три методы, что закомменчены, ноль результат. Видимо что то не учёл, кто нибудь сталкивался? |
#2
|
|||
|
|||
Методы Canvas объекта нужно вызывать в перекрытом методе Paint
Код:
type TShapeEx = class(TShape) protected procedure Paint; override; end; procedure TShapeEx.Paint; begin // Здесь вызываем Canvas.textOut end; // И уже новый класс TShapeEx используем для создания объекта // на форме. |
#3
|
||||
|
||||
Но можно сделать и по другому, например вот так:
Код:
TLabel(O).Canvas.TextOut(0, 30, '67890') Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |