I want to add custom designed buttons to my Inno Script with the TBitmapImage
class.
My Inno Setup script is compiling just fine but the bitmap isn’t showing in the form. I looked into any possibilities but can’t seem to find the error I made. That’s how the TBitmapImage
part looks like atm:
procedure CreateMuteButton(ParentForm: TSetupForm);
var
MuteImage: TBitmapImage;
BitmapFileName: String;
begin
BitmapFileName := ExpandConstant('{tmp}muteBtn.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
MuteImage := TBitmapImage.Create(ParentForm);
MuteImage.Bitmap.LoadFromFile(BitmapFileName);
MuteImage.Cursor := crHand;
MuteImage.OnClick := @MuteButtonOnClick;
MuteImage.Parent := ParentForm;
MuteImage.Left := 45;
MuteImage.Top := 80
MuteImage.Width := 38;
MuteImage.Height := 50;
end;
procedure InitializeWizard();
var
val: Integer;
begin
CreateMuteButton(WizardForm);
(...)
end;
asked May 27, 2012 at 20:49
3
The WizardForm
client area itself is only visible below the bottom bevelled line. Above that is WizardForm.InnerPage
, and the individual/current Wizard pages in the middle contained in a private InnerNotebook
.
This puts the image to the left of the pages:
MuteImage := TBitmapImage.Create(WizardForm.InnerPage);
MuteImage.Parent := WizardForm.InnerPage;
MuteImage.Left := 0;
{ Uses the top of the wizard pages to line up }
MuteImage.Top := WizardForm.SelectDirPage.Parent.Top;
Whereas this puts it in the bottom section:
MuteImage := TBitmapImage.Create(WizardForm);
MuteImage.Parent := WizardForm;
MuteImage.Left := 0;
{ Below the inner page }
MuteImage.Top := WizardForm.InnerPage.Height;
answered May 28, 2012 at 10:32
DeannaDeanna
23.8k7 gold badges71 silver badges155 bronze badges
1
1 / 1 / 0 Регистрация: 30.04.2012 Сообщений: 124 |
|
1 |
|
25.03.2013, 17:16. Показов 3532. Ответов 11
0 |
143 / 143 / 39 Регистрация: 17.08.2012 Сообщений: 411 |
|
25.03.2013, 18:03 |
2 |
rita_0705, Ясно же написано — «Класс TImage не найден»…
0 |
1 / 1 / 0 Регистрация: 30.04.2012 Сообщений: 124 |
|
25.03.2013, 19:11 [ТС] |
3 |
как исправить ошибку?=(
0 |
143 / 143 / 39 Регистрация: 17.08.2012 Сообщений: 411 |
|
25.03.2013, 19:15 |
4 |
rita_0705, .Вы удалили у компонента имя в ObjectInspector.
1 |
Mawrat 13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||
25.03.2013, 19:15 |
5 |
|||
rita_0705, подключи модуль ExtCtrls:
В этом модуле определён класс TImage.
0 |
Житель Земли 2999 / 2998 / 391 Регистрация: 26.07.2011 Сообщений: 11,459 Записей в блоге: 1 |
|
25.03.2013, 19:21 |
6 |
подключи модуль ExtCtrls дык если положить на форму TImage, он сам подключится.
как исправить ошибку?=( вообще-то, желательно бы взглянуть на код
1 |
Mawrat 13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||
25.03.2013, 19:28 |
7 |
|||
дык если положить на форму TImage, он сам подключится. Да, верно. vampire6666, правильно сказал — значение свойства Image.Name установлено равным пустой строке. Добавлено через 1 минуту Добавлено через 1 минуту
То для Image1 в поле Name надо задать такое же имя: Image1.Name = Image1 — это в инспекторе объектов надо сделать.
0 |
Житель Земли 2999 / 2998 / 391 Регистрация: 26.07.2011 Сообщений: 11,459 Записей в блоге: 1 |
|
25.03.2013, 19:29 |
8 |
начение свойства Image.Name установлено равным пустой строке. не, в этом случае такая ошибка не вылезет, вылезет вот что: Undeclared identifier: ‘Image1’.
0 |
Mawrat 13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||
25.03.2013, 19:41 |
9 |
|||
DenNik, всё-таки скорее всего пустое имя задано. Я сейчас проверил — кинул на форму Image1 : TImage. Потом стёр имя у него. И при запуске программы возникла точно такая же ошибка. Добавлено через 9 минут
1 |
Супер-модератор 32593 / 21062 / 8134 Регистрация: 22.10.2011 Сообщений: 36,335 Записей в блоге: 8 |
|
25.03.2013, 19:44 |
10 |
не, в этом случае такая ошибка не вылезет, вылезет вот что: Undeclared identifier: ‘Image1’. Только если в коде есть обращение к этому Image1. Иначе программа скомпилируется, но не запустится, что и произошло.
0 |
Житель Земли 2999 / 2998 / 391 Регистрация: 26.07.2011 Сообщений: 11,459 Записей в блоге: 1 |
|
25.03.2013, 19:44 |
11 |
кинул на форму Image1 : TImage. Потом стёр имя у него. И при запуске программы возникла точно такая же ошибка. нуу, если так, то да возникает вопрос, как такое случилось?
0 |
Mawrat 13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||
25.03.2013, 19:52 |
12 |
|||
возникает вопрос, как такое случилось? Разное может случиться. Но оказалась, что ситуация другая. Хотя ошибка с таким же текстом появляется. Вернее там 2 исключения возникают с разными текстами.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
25.03.2013, 19:52 |
Помогаю со студенческими работами здесь Часто, при запуске проекта, выходит эта ошибка «[DCC Fatal Error] F2039 Could not create output file ‘Project1.exe'» Exception class EClassNotFound with message ‘Class TEdit not found’ при запуске приложения Ошибка в строке 97: «incompatible types», а в 99 ошибка: «identifier expected but ‘^’ found», как исправить? При запуске выводится сообщение ‘Class «TOpenGLControl» not found’ Cледующая программа компилируется , Исключение: «Class EresNotFound with message ‘Resource TForm1 not found'» при запуске программы Ошибка при запуске программы: exception class ‘EConvertError’ with message «» is an invalid integer Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |
Делал все на основе этой статьи: ссылка
Но в логах пишет
Error: Class 'appmodelsCountry' not found in /home/artyom/www/localhost/controllers/CountryController.php:19
Мой Country.php
<?php
/**
* Created by PhpStorm.
* User: artyom
* Date: 09.08.17
* Time: 14:45
*/
namespace appmodels;
use yiidbActiveRecord;
class Country extends ActiveRecord
{
}
Мой CountryController.php
<?php
/**
* Created by PhpStorm.
* User: artyom
* Date: 09.08.17
* Time: 14:48
*/
namespace appcontrollers;
use yiiwebController;
use yiidataPagination;
use appmodelsCountry;
class CountryController extends Controller
{
public function actionIndex()
{
$query = Country::find();
$pagination = new Pagination([
'defaultPageSize' => 5,
'totalCount' => $query->count(),
]);
$countries = $query->orderBy('name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'countries' => $countries,
'pagination' => $pagination,
]);
}
}
Мой файл в views/country/index.php
<?php
/**
* Created by PhpStorm.
* User: artyom
* Date: 09.08.17
* Time: 14:51
*/
use yiihelpersHtml;
use yiiwidgetsLinkPager;
?>
<h1>Countries</h1>
<ul>
<?php foreach ($countries as $country): ?>
<li>
<?= Html::encode("{$country->name} ({$country->code})") ?>:
<?= $country->population ?>
</li>
<?php endforeach; ?>
</ul>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
Может автолодеру нужно что-то сказать?
Форум программистов Vingrad
Модераторы: Snowy, Alexeis, MetalFan |
Поиск: |
|
Глюк с копированием Bitmap, |
Опции темы |
Darksquall |
|
||||||
Опытный Профиль
Репутация: нет
|
Как считаете почему не работает вот это?
ошибка не вылетает но копирования в image3 не происходит.
но работает это.
как еще можно скопировать один битмап в другой? p.s. Bmp1:=bmp2; ——————— www.bankcards.su |
||||||
|
|||||||
Romikgy |
|
||
Любитель-программер Профиль
Репутация: нет
|
интересно почему? ——————— Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||
|
|||
Darksquall |
|
||
Опытный Профиль
Репутация: нет
|
Romik можно попиксельно,как угодно только что бы быстро. ——————— www.bankcards.su |
||
|
|||
Kesh |
|
||
Эксперт Профиль
Репутация: 1
|
——————— |
||
|
|||
Snowy |
|
||
Эксперт Профиль
Репутация: 18
|
|
||
|
|||
Alexeis |
|
||
Амеба Профиль
Репутация: 55
|
Darksquall, Конечно! после записи в поток внутренний указатель потока смещается в конец. Рекомендуется его перед любой записью и чтением устанавливать в нуль.
— про assign это не совсем так, дело в том что при выполнении этого метода скорее всего будет то что вы описали, но после первой же попытки модифицировать любой из битмапов (или удалить), программа создаст две различные независимые копии битмапов для каждого из объектов. ——————— Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||
|
|||
Darksquall |
|
||
Опытный Профиль
Репутация: нет
|
Благодарю, совсем работа замучала, забыл что Position в стриме в нуль устанавливать нужно ——————— www.bankcards.su |
||
|
|||
Snowy |
|
||
Эксперт Профиль
Репутация: 18
|
Без всяких первых попыток. |
||
|
|||
Alexeis |
|
||
Амеба Профиль
Репутация: 55
|
Snowy, но изображение является указателем на область памати не знаю как копируется свойство ——————— Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||
|
|||
Snowy |
|
||
Эксперт Профиль
Репутация: 18
|
Сам битмап является пропертёй.
|
||
|
|||
Alexeis |
|
||||||
Амеба Профиль
Репутация: 55
|
Snowy, чтож с этим не поспоришь, но я имел ввиду другую ситуацию.
Или в этом случае тоже самое? Добавлено @ 11:26
Это очень похоже на простое копирование внутреннего адреса изображения. FImage объявлен как объект класса TBitmapImage дальше идет
Это сообщение отредактировал(а) alexeis1 — 4.5.2006, 11:29 ——————— Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||||
|
|||||||
Snowy |
|
||
Эксперт Профиль
Репутация: 18
|
Хм. И правда. |
||
|
|||
|
Правила форума «Delphi: Звук, графика и видео» | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
От: |
KSN |
||
Дата: | 27.12.04 13:46 | ||
Оценка: |
Собираю проект из нескольких lib-файлов. Проект нормально компилируется, но в ходе работы приложения при запуске формы, реализованной в одном из lib-файлов, получаю сообщение class TDBText not found. Обычно это сообщение появляется, если я использовал какую-то компоненту (в данном случае TDBText) на форме, но стёр строку include для неё. Либо не делаю #pragma link на obj-файл, в котором есть эта компонента. Но!
В библиотеке, которая вызывает названную ошибку, не используется компонента TDBText, её вообще там нет!
Для эксперимента положил на форму TDBText. Тогда получил сообщение class TDBGrid not found. Эта компонента тоже не используется в форме.
Что за фигня такая, кто знает. Как можно побороть её?
Успехов
Кабаев Сергей
От: |
Softwarer |
http://softwarer.ru | |
Дата: | 27.12.04 14:00 | ||
Оценка: |
Здравствуйте, KSN, Вы писали:
KSN>Для эксперимента положил на форму TDBText. Тогда получил сообщение class TDBGrid not found. Эта компонента тоже не используется в форме.
KSN>Что за фигня такая, кто знает. Как можно побороть её?
Хм. Может ли быть так, что на эти классы как-то завязан родительский класс формы?
Собственно это сообщение является результатом вызова FindClass (в Delphi; думаю, в билдере то же самое). А сама эта подпрограмма может быть вызвана явно, а кроме того, активно вызывается при загрузке классов — можно посмотреть по исходникам RTL все места.
От: |
Dimentiy
|
||
Дата: | 27.12.04 15:35 | ||
Оценка: |
Здравствуйте, KSN, Вы писали:
KSN>Что за фигня такая, кто знает. Как можно побороть её?
Это сообщение выдаётся, когда с помощью RTTI пытаются создать некий объект по имени класса (например, при чтении dfm-ресурса и воссоздании по нему формы/datamodule).
Нормально при инициализации приложения происходят вызовы RegisterClass, строится RTTI структура и в этом окружении приложение уже работает. Некоторыми действиями можно нарушить эту последовательность — как простой пример, засунуть в initialization секцию модуля какой-то код, которому уже нужна RTTI информация. Или иногда любят люди понапихать логики до вызова Application.Run.
Побороть можно двумя путями:
— Найти, где нарушается «правильная» последовательность инициализации (может быть долго)
— Просто вызвать RegisterClass(class_name) где-нибудь в самом начале выполнения программы (идеологически криво, но чаще работает).
Это всё написано для Delphi, думаю что в Builder всё ровно так же.
Удачи.
От: |
Sergei I. Gorelkin
|
||
Дата: | 27.12.04 19:39 | ||
Оценка: |
+1 |
Здравствуйте, Dimentiy, Вы писали:
D>Это сообщение выдаётся, когда с помощью RTTI пытаются создать некий объект по имени класса (например, при чтении dfm-ресурса и воссоздании по нему формы/datamodule).
D>Нормально при инициализации приложения происходят вызовы RegisterClass, строится RTTI структура и в этом окружении приложение уже работает. Некоторыми действиями можно нарушить эту последовательность — как простой пример, засунуть в initialization секцию модуля какой-то код, которому уже нужна RTTI информация. Или иногда любят люди понапихать логики до вызова Application.Run.
D>Побороть можно двумя путями:
D>- Найти, где нарушается «правильная» последовательность инициализации (может быть долго)
D>- Просто вызвать RegisterClass(class_name) где-нибудь в самом начале выполнения программы (идеологически криво, но чаще работает).
Позволю себе немного Вас поправить.
RTTI не строится при инициализации приложения — ее формирует компилятор. RTTI-таблица класса содержит, помимо прочего, список published свойств этого класса со ссылками на типы этих свойств. Поэтому для тех классов, на которые ссылается RTTI, вызывать RegisterClass не обязательно — они могут быть найдены путем просмотра RTTI. Этим занимается функция Classes.GetFieldClass(). А она, если обламывается, вызывает FindClass() для поиска в глобальной таблице классов (ClassList) и таблице псевдонимов классов (ClassAliasList). И только в случае отсутствия классов в обоих таблицах получаем EClassNotFound.
RegisterClass() нужно вызывать только для «нестандартных» классов, например, TMenuItem, который переопределяет GetChildren() для перечисления вложенных пунктов меню — так, что по .dfm получается будто бы он имеет множество свойств типа самого себя, а реально вложенные TMenuItem содержатся в FItems: TList, который вообще не является наследником TPersistent и поэтому не может быть записан в dfm.
Самый простой способ получить class not found — это перенести автоматически созданное при бросании компонента на форму (суть published) объявление свойства в одну из private, protected или public секций. Либо пытаться грузить dfm ресурс, не соответствующий форме/датамодулю.
А методы борьбы — правильные. Хотя я бы порекомендовал напрячься и решить вопрос первым из указанных способов. Потому что вызов RegisterClass приведет с тому, что класс найдется и создастся объект соответствующего типа — суть хорошо прикрытые листвой грабли, на которые рано или поздно кто-то наступит.
Прошу прощения за несколько сумбурное изложение — новогоднее настроение и полбутылки мартини, однако…
От: |
Dimentiy
|
||
Дата: | 27.12.04 21:39 | ||
Оценка: |
Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>Позволю себе немного Вас поправить.
SIG>…
Э-э-э… Полностью согласен!
Строго говоря, да — RTTI — это конечно же именно то, что генерит компилятор.
SIG>Прошу прощения за несколько сумбурное изложение — новогоднее настроение и полбутылки мартини, однако…
Если как мартини и повлияло — то только тем, что было не в лом описывать всё целиком
От: |
KSN |
||
Дата: | 28.12.04 07:41 | ||
Оценка: |
Здравствуйте, Dimentiy, Вы писали:
D>Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>>Позволю себе немного Вас поправить.
SIG>>…
D>Э-э-э… Полностью согласен!
D>Строго говоря, да — RTTI — это конечно же именно то, что генерит компилятор.
SIG>>Прошу прощения за несколько сумбурное изложение — новогоднее настроение и полбутылки мартини, однако…
D>Если как мартини и повлияло — то только тем, что было не в лом описывать всё целиком
Ага, понятно почему появляется сообщение об ошибке.
Но по-прежнему непонятно, при чем здесь классы TDBText, TDBGrid если их на форме нет. И в библиотеке, в которую включена форма, их тоже нет.
Раньше эти классы использовались в форме. Впоследствии я отредактировал вручную dfm-файл и заменил TDBGrid на TDBGridEh, а все TDBText убрал с формы. Сейчас никаких следов от этих компонент в проекте не осталось, (Искал контекстным поиском по всем файлам проекта), Так почему же они вылезают при инициализации формы?
Успехов
Кабаев Сергей
От: |
Dimentiy
|
||
Дата: | 28.12.04 08:12 | ||
Оценка: |
Здравствуйте, KSN, Вы писали:
KSN>Но по-прежнему непонятно, при чем здесь классы TDBText, TDBGrid если их на форме нет. И в библиотеке, в которую включена форма, их тоже нет.
Но чудес-то не бывает.
От: |
KSN |
||
Дата: | 28.12.04 08:16 | ||
Оценка: |
Здравствуйте, Dimentiy, Вы писали:
D>Здравствуйте, KSN, Вы писали:
D>Но чудес-то не бывает.
Возразить сложно
Успехов
Кабаев Сергей
От: |
KSN |
||
Дата: | 28.12.04 09:35 | ||
Оценка: |
Здравствуйте, KSN, Вы писали:
KSN>Здравствуйте, Dimentiy, Вы писали:
D>>Здравствуйте, KSN, Вы писали:
D>>Но чудес-то не бывает.
KSN>Возразить сложно
Нашлась ошибка. Версия насчет кривого dfm-файла оказалась верной. В директории проекта лежала старая версия dfm-a, она-то и подлинковывалась в проект при сборке.
Успехов
Кабаев Сергей
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.