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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> компонент из двух TImage 
:(
    Опции темы
gonzales
Дата 7.2.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



Доброе время суток!!

Поможите с написанием компонента.
Сам компонент наследник TImage. Задача поверх него положить еще один TImage.
пробую реализовать так
Код

type
  TFrameImage = class(TImage)
  private
  //  fframelayer: TImage;
    graphicsGDIPlus: IGPGraphics; //
    Fboxforframe:TImage;

published
    constructor Create(aowner: Tcomponent); override; // Конструктор
    property boxforframe: TImage read Fboxforframe write Fboxforframe;


constructor TFrameImage.Create(aowner: Tcomponent); // конструктор
  begin

    inherited Create(aowner);
    boxforframe:=TImage.Create(self);
    boxforframe.SetSubComponent(true);
    boxforframe.Parent:=Parent;
    boxforframe.Name:=name+'bx';
    boxforframe.Show;
    boxforframe.Left:=left;
    boxforframe.Top:=top;
    boxforframe.Height:=height;
    boxforframe.Width:=width;
    boxforframe.Visible:=true;
    boxforframe.Canvas.Brush.Color:=clBlack;
    boxforframe.Canvas.FillRect(boxforframe.Canvas.ClipRect);

  end;



создаю экземпляр компонента
Код

 frame := TFrameImage.Create(Form1.workspace);
      frame.Parent := Form1.workspace;
 frame.name := 'frame';
frame.Show;
      frame.Left := 10;
      frame.Top := 10;
      frame.Width := 100;
      frame.Height := 100;


по идее должен увидеть закрашенный черным цветом квадрат.
Но его не видно. Создается только "нижний" TImage.

Мне кажется я неправильно работаю с родителем
    boxforframe:=TImage.Create(self);
    boxforframe.SetSubComponent(true);
    boxforframe.Parent:=Parent;
перепробывал по разному, никак не получается.
Подскажите плиз!!


--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
Doga
Дата 7.2.2013, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 20.12.2007
Где: Россия, Обнинск

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



Привет.

Мне кажется, Вы тут немного перемудрили.

Проще сделать этот компонент наследником какого-нибудь контейнера, 
который может быть владельцем других компонентов, напр. TCustomPanel.
Объявите в новом классе 2 public свойства типа TImage - Image1 и Image2. 
Хотя, лучше published, чтоб была возможность работать с ними дизайнере.
Создайте их в конструкторе класса, настройте их свойства и разместите 
их в контейнере необходимым образом. И всё.

Такая организация компонента значительно упростит и его разработку и его
использование.
PM MAIL WWW   Вверх
gonzales
Дата 8.2.2013, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



дело в том, что мне нужен прозрачный компонент с canvas для рисования, к сожалению TPanel не подходит для этого так как не может быть прозрачной
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
Doga
  Дата 8.2.2013, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 20.12.2007
Где: Россия, Обнинск

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



Не вижу проблем. Перепешите его метод Paint() так, как Вам надо. 
Не надо себя сдерживать! Возмите кисть и творите! ТВОРИТЕ!
Только про краску не забудьте  smile 

И вообще, на этой панели свет клином не сошёлся smile
PM MAIL WWW   Вверх
bems
Дата 13.2.2013, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 31
Всего: 88



Цитата(gonzales @  7.2.2013,  14:56 Найти цитируемый пост)
boxforframe.Parent:=Parent;

если эта строчка есть только в конструкторе, то у подкомпонента скорее всего родитель остается nil
потому что насколько я помню при чтении компонента на форме, он сначала создается без родителя, а потом делается установка свойства Parent
нужно в TFrameImage перекрыть SetParent и в нем сделать boxforframe.Parent:=Parent


--------------------
Обижено школьников: 8
PM MAIL   Вверх
gonzales
Дата 5.3.2013, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



Спасибо, все срослось!

Есть еще один маленький вопросик, какую процедуру надо перекрыть, чтоб изменять физические параметры boxframe вслед за основным компонентом.
Пробывал 
Код

    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMMove(var Message: TWMMove); message WM_MOVE;

procedure TFrameImage.WMSize(var Message: TWMSize);
begin
 inherited;
 Invalidate;
     boxforframe.Left:=left;
    boxforframe.Top:=top;
    boxforframe.Height:=height;
    boxforframe.Width:=width;
end;

procedure TFrameImage.WMMove(var Message: TWMMove);
begin
 inherited;
 Invalidate;
     boxforframe.Left:=left;
    boxforframe.Top:=top;
    boxforframe.Height:=height;
    boxforframe.Width:=width;
end;



не срабатывает
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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