Поиск:

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


Шустрый
*


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

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



Timage

Как слепить два компонента TImage и TLabel
PM MAIL   Вверх
_hunter
Дата 26.1.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



что значит слепить?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Werti
Дата 26.1.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добавить свойство к TImage Caption как в TLabel.
PM MAIL   Вверх
_hunter
Дата 26.1.2005, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



т.е. сделать что-то типа TLabeledEdit?
тогда просто напиши класс, наследник этих двух классов ( в объявлении через запятую перечисли )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Werti
Дата 27.1.2005, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(_hunter @ 26.1.2005, 20:12)
т.е. сделать что-то типа TLabeledEdit?
тогда просто напиши класс, наследник этих двух классов ( в объявлении через запятую перечисли )

Эт как создовать компонент какого типа именно.
PM MAIL   Вверх
Adil'
Дата 27.1.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(_hunter @ 26.1.2005, 20:12)
т.е. сделать что-то типа TLabeledEdit?
тогда просто напиши класс, наследник этих двух классов ( в объявлении через запятую перечисли )
Не прокатит -VCL не поддерживает множественное наследование.



--------------------
Удачи
PM MAIL WWW   Вверх
Adil'
Дата 27.1.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Самое простое - создать класс наследник от TImage и добавить ему св-во Caption, типа:
Код
//Unit1.cpp
class TCapImage : public TImage
{                            
 typedef TImage inherit;
protected:
 System::AnsiString FCaption;
 void __fastcall SetCaption(System::AnsiString Value)
 {
   if(FCaption!=Value)
   {
     FCaption=Value;
     inherit:Invalidate();
   }
 }
virtual void __fastcall Paint(void)
 {
   inherit::Paint();
   if(!FCaption.IsEmpty() && Parent)
   {//это извращение с ДЦ родительского компонета из-за того,
     //что если в Image загружен НЕ Bitmap, то доступ к его Canvas вызывает EInvalidOperation :(
     //поэтому выводим текст в ДС родительского компонента
     HDC hDC=GetDC(Parent->Handle);
     if(hDC)
     {
       ////считаем, что можем вписывать текст в прямоугольник имаджа
       TRect rc=ClientRect;
       OffsetRect(&rc,Left,Top);
       int bkmode=GetBkMode(hDC);
       SetBkMode(hDC,TRANSPARENT);
       DrawText(hDC,FCaption.c_str(), FCaption.Length(),&rc,DT_LEFT|DT_TOP|DT_WORDBREAK);
       SetBkMode(hDC,bkmode);
     }
   }
 }
public:
 __fastcall TCapImage(TComponent* AOwner) : TImage(AOwner)
 {
   FCaption=Name;
 }
__property System::AnsiString Caption = {read = FCaption, write=SetCaption};
};

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
TCapImage *ci; //для проверки создаём компонент динамически

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 ci=new TCapImage(this);
 //для проверки на форму кинули TImage (Image1), загрузили в него картинку и задали нек. св-ва.
 // а нашему компоненту присваиваем тоже самое.
 ci->Width=Image1->Width;
 ci->Height=Image1->Height;
 ci->Parent=this;
 ci->Stretch=Image1->Stretch;
 ci->Top=10;
 ci->Left=10;
 ci->Picture->Assign(Image1->Picture);
 ci->Caption="TCapImage caption";
}
//---------------------------------------------------------------------------
//для проверки кинули на форму эдит и баттон -
//при нажатии на кнопку меняем капшион у нашего компонента ( делаем как текст у эдита)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if(ci)
   ci->Caption=Edit1->Text;  
}
//---------------------------------------------------------------------------

Этот код, конечно, далёк от совершенства, можно ввести много еще каких примочек (аналогичных примочкам TLabel, задание Font, например, и т.д), но дает представление, в каком направлении можно двигаться smile



--------------------
Удачи
PM MAIL WWW   Вверх
Werti
Дата 28.1.2005, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Adil @ 27.1.2005, 11:39)
Самое простое - создать класс наследник от TImage и добавить ему св-во Caption, типа:
Код
//Unit1.cpp
class TCapImage : public TImage
{                            
 typedef TImage inherit;
protected:
 System::AnsiString FCaption;
 void __fastcall SetCaption(System::AnsiString Value)
 {
   if(FCaption!=Value)
   {
     FCaption=Value;
     inherit:Invalidate();
   }
 }
virtual void __fastcall Paint(void)
 {
   inherit::Paint();
   if(!FCaption.IsEmpty() && Parent)
   {//это извращение с ДЦ родительского компонета из-за того,
     //что если в Image загружен НЕ Bitmap, то доступ к его Canvas вызывает EInvalidOperation :(
     //поэтому выводим текст в ДС родительского компонента
     HDC hDC=GetDC(Parent->Handle);
     if(hDC)
     {
       ////считаем, что можем вписывать текст в прямоугольник имаджа
       TRect rc=ClientRect;
       OffsetRect(&rc,Left,Top);
       int bkmode=GetBkMode(hDC);
       SetBkMode(hDC,TRANSPARENT);
       DrawText(hDC,FCaption.c_str(), FCaption.Length(),&rc,DT_LEFT|DT_TOP|DT_WORDBREAK);
       SetBkMode(hDC,bkmode);
     }
   }
 }
public:
 __fastcall TCapImage(TComponent* AOwner) : TImage(AOwner)
 {
   FCaption=Name;
 }
__property System::AnsiString Caption = {read = FCaption, write=SetCaption};
};

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
TCapImage *ci; //для проверки создаём компонент динамически

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 ci=new TCapImage(this);
 //для проверки на форму кинули TImage (Image1), загрузили в него картинку и задали нек. св-ва.
 // а нашему компоненту присваиваем тоже самое.
 ci->Width=Image1->Width;
 ci->Height=Image1->Height;
 ci->Parent=this;
 ci->Stretch=Image1->Stretch;
 ci->Top=10;
 ci->Left=10;
 ci->Picture->Assign(Image1->Picture);
 ci->Caption="TCapImage caption";
}
//---------------------------------------------------------------------------
//для проверки кинули на форму эдит и баттон -
//при нажатии на кнопку меняем капшион у нашего компонента ( делаем как текст у эдита)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if(ci)
   ci->Caption=Edit1->Text;  
}
//---------------------------------------------------------------------------

Этот код, конечно, далёк от совершенства, можно ввести много еще каких примочек (аналогичных примочкам TLabel, задание Font, например, и т.д), но дает представление, в каком направлении можно двигаться smile

Спасибки большое пришлось помучиться и строить новый компонент на TGraphicsControl
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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