Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.10.2007, 01:20
PaulStrong PaulStrong вне форума
Прохожий
 
Регистрация: 25.10.2007
Сообщения: 1
Репутация: 10
По умолчанию Непонятка с 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  
Старый 25.10.2007, 08:19
AlexBlack AlexBlack вне форума
Прохожий
 
Регистрация: 12.10.2007
Сообщения: 12
Репутация: 10
По умолчанию

Методы Canvas объекта нужно вызывать в перекрытом методе Paint

Код:
type
    TShapeEx = class(TShape)
    protected
         procedure Paint; override;
    end;

    procedure TShapeEx.Paint; 
    begin
        // Здесь вызываем Canvas.textOut
    end;

    // И уже новый класс TShapeEx используем для создания объекта 
    // на форме. 
 
Ответить с цитированием
  #3  
Старый 25.10.2007, 11:39
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Но можно сделать и по другому, например вот так:
Код:
TLabel(O).Canvas.TextOut(0, 30, '67890')
TLabel я выбрал потому, что у него свойство Canvas доступно.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter