Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему не работает метод TCanvas в конструкторе? Метод TCanvas в constructore выдаёт ошиб 
V
    Опции темы
ivan219
  Дата 16.1.2008, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Прослема собственно стостоит вот в чём:
Код

TFEdit = class(TCustomControl)
.
.
constructor TFEdit.Create(AOwner: TComponent);
begin
.
.
  Canvas.TextHeight('asdf');
end;

Если вызывать TextHeight, TextWidth класса Canvas в constructore то при помещении компонента на форму возникает такое сообщение "Control " has no parent window." интересно по чему?

Это сообщение отредактировал(а) ivan219 - 16.1.2008, 06:32
PM MAIL ICQ   Вверх
MetalFan
Дата 16.1.2008, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



потому, что у контрола еще не назначен парент во время выполнения кода конструктора.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ivan219
Дата 16.1.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Что-то я не пойму ведь с Canvas работать можно там цвет стиль менять.
А проблема возникает вот в этой API функции
Код

Windows.GetTextExtentPoint32(FHandle, PChar(Text), Length(Text), Result);

И не понятно причём тут Parent smile 
PM MAIL ICQ   Вверх
ama_kid
Дата 16.1.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата
Что-то я не пойму ведь с Canvas работать можно там цвет стиль менять
Это ты работаешь с внутренними свойствами объекта Canvas, которые не зависят от внешних объектов, но FHandle - это хендл окна, с которым работает канва, т.е. в данном случае - должен быть хендл парента и пока он не присвоен - такая ошибка будет появляться... 
Как вариант - я обычно (когда уверен, где и как будет использоваться компонент) делаю так:
Код
constructor TXxxx.Create(AOwner: TComponent);
begin
  inherited;
  Parent:=AOwner as TWinControl;
  //здесь уже парент присвоен и можно делать любые действия
end;
ну и конечно в конструктор передаю владельца с рассчетом, что он и будет парентом...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MetalFan
Дата 16.1.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



ama_kid, не самый лучший способ, но как вариант конечно сойдет...
а лучше вынести доп.код в другой метод. например так:
Код

  TSomeClass.Init( AParent: TWinControl );
  begin
    Parent := AParent;
    ....
  end;



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ivan219
  Дата 17.1.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



Ну вобщем всё стало боле мене ясно, спасибо.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.