Автор |
Сообщение |
Enigma Темный Эльф Предупреждений : 1
|
|
Товариши, кто шарит в С++ памагите!
Вот сделал програмку одну на Delphi.
А терь хочу ее в С++ портировать.
Вопрос:
В Паскале переменную типа TImage можно обьявить так:
Im : TImage;
А в С++ там с обьявлением имаджевской переменной проблем много.
Так вот, напишите как будет выглядеть обьявление TImageвской переменной на С++.
Отвены типа
TImage Im; не предлагать, они все равно не работают!!! |
|
|
|
|
312 Форумчанин |
|
Enigma писал(а): |
TImage Im; не предлагать, они все равно не работают!!! |
а что не работает? может тебе указатель нужен? или что еще? |
|
|
|
|
Andron_ Гуру Предупреждений : 4
|
|
TImage* pTim;
pTim = new TImage(<указать нужные параметры>);
ибо *цитата хелп* "objects of VCL classes must be created only with new statement" |
|
|
|
|
Enigma Темный Эльф Предупреждений : 1
|
|
Andron_
objects of VCL classes must be created only with new statement
Во, вот с этим я и парился!!! Перевести все немог и понять, что от меня хотят то!!!
указать нужные параметры - что в эти параметры входит?
если размеры итд, то не покатит.
У меня картинки в БД храняться. Тобишь есть переменная типа имаг, в нее заносим первую запись из БД. Рисуем ее, затем запись+1, и следующуу и.т.д!! |
|
|
|
|
Andron_ Гуру Предупреждений : 4
|
|
Enigma
параметры конструктора, какие хочешь... но наеврное тебе никаких не нада, оставляй пустые скобки. |
|
|
|
|
Panter Продвинутый форумчанин |
|
Andron_ писал(а): |
но наеврное тебе никаких не нада, оставляй пустые скобки. |
Не совсем так
это объявление конструктора:
__fastcall virtual TImage(Classes::TComponent* AOwner);
Владельца-таки надо указать конструктору |
|
|
|
|
dlnsk Гуру |
|
Enigma писал(а): |
В Паскале переменную типа TImage можно обьявить так:
Im : TImage; |
Но использовать-то можно все-равно только после:
Im := TImage.Create(<параметры>);
...ибо конструктор - вещь необходимая везде! |
|
|
|
|
Enigma Темный Эльф Предупреждений : 1
|
|
dlnsk
Цитата: |
Но использовать-то можно все-равно только после:
Im := TImage.Create(<параметры>); |
В делфи и без этого канает |
|
|
|
|
Klayd Гуру Предупреждений : 1
|
|
Enigma
хы... ерунду говорите... экземпляр класса без конструктора НЕ МОЖЕТ появиться... иначе обращение по неправильному указателю и превед сегментэйшн фоулт... советую поискать конструктор... например в конструкторе формы... или гдето там по близости )) давно уж за делфю не садился... |
|
|
|
|
Enigma Темный Эльф Предупреждений : 1
|
|
Klayd
я тебе серьезно говрорю, что описание конструктора я не делал.
вероятно этим занимаеться компилятор во время компиляции.
во всяком случае делфа такую ошибку прощает. |
|
|
|
|
Klayd Гуру Предупреждений : 1
|
|
Enigma
господи... УЧИТЕ МАТ, ЧАСТЬ!!!
любой класс является потомком базового класса (щас не вспомню как он там зовётся TObject кажется), в котором прописан конструктор по умолчанию. при добавление элемента на форму создаётся класс формы (в который входят все добавляемые вами компоненты) и экземпляр этого класса. При вызове Form.Create вызываются конструкторы для всех экземпляров классов, содержащихся на форме. Ежу понятно, что вы ничего не описывали - класс-то стандартный и без жестокой необходимости конструктор править ему и не нужно... Но утверждать, что его нету или он не вызывается... хм... |
|
|
|
|
Enigma Темный Эльф Предупреждений : 1
|
|
Klayd
Сам читай внимательнее. Я не говорил, что его нет. Конечно же он есть! Так как Im - переменнаая, в которую занесены свойства обьекта TImage (стандартный) со всеми крнструкторами и деструкторами.
dlnsk писал(а): |
Но использовать-то можно все-равно только после:
Im := TImage.Create(<параметры>); |
Я говорил, что для того чтобы использовать не нужно писать конструктор отдельно для Im!!!!
З.Ы. И вообще кончай мне выкать! Пили же вместе, а ты ме вы да вы. |
|
|
|
|
dlnsk Гуру |
|
2Enigma:
Полностью согласен с Klayd.
Советую вам прочитать повнимательнее основы ООП! Иначе вы поимеете много проблем с С++ и любым другим языком использующим объектно-ориентированную модель.
Нельзя путать объектную ссылку (Im) и объект. Можно определить объектную ссылку, но нельзя ей пользоваться пока она не ссылается на объект!
Klayd и я говорим не о том, что нужно писать конструктор, а о том, что его нужно вызывать для создания объекта!
Попробуйте сделать:
Im.Picture.LoadFromFile('MyPic.bmp'); //не забудьте поместить файл в папку проекта
и вы получите ошибку времени выполнения, т.к. Im не ссылается на реальный объект в памяти!
Но если вы напишете:
Im := TImage.Create(Form1);
Im.Picture.LoadFromFile('MyPic.bmp');
то все пройдет нормально и вы даже можете отобразить картинку добавив:
Im.Parent := Form1; |
|
|
|
|
Enigma Темный Эльф Предупреждений : 1
|
|
dlnsk
цЫтато из кода
***
table1.first;
Tag := 0;
for i := 1 to Table1.recordcount do
with timage.Create(panel1) do
begin
parent:=panel1;
name:='Im'+inttostr(i);
width:=32;height:=32;
top:= 140 + 36*((i-1)div 4);
left:=8 +36*((i-1)mod 4);
picture:=dbimage1.picture;
tag:=i;
table1.Next;
onclick:=im1click;
end;
end;
***
А теперь внимание вопрос!
Enigma писал(а): |
В Паскале переменную типа TImage можно обьявить так:
Im : TImage;
А в С++ там с обьявлением имаджевской переменной проблем много. |
Просто не внимательно читал и не понял, что мы говорим о разных вещах.
З.Ы. в делфи проблемм нет. Изначально проект был написан на паскале, а вот с переводом его в с++ возникли проблеммы. |
|
|
|
|
dlnsk Гуру |
|
Я так понимаю, что вы портируете в C++ Builder. Поскольку у него библиотека с Delphi одна и та же, то и пишется в точности также.
Но т.к., если мне не изменяет память, в C++ нет аналога with, то делаем так:
TImage Im;
for (...) {
Im = new TImage(panel1);
Im->Parent = panel1;
//и далее по тексту с добавлением Im-> где надо.
} |
|
|
|
|
|