Поиск:

Ответ в темуСоздание новой темы Создание опроса
> компонент Image 
V
    Опции темы
susanin
Дата 5.3.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как сделать, чтобы компилятор определял есть ли в компоненте Image рисунок??? и сразу еще вопрос.... создал операцию отмены поворота изображения с помощью Clipboard(), но почему то эта операция нормально работает только в главном меню...при создании такого же кода на быстрой кнопке вылетает страшная ошибка....как будто ассемблирование программы( если я правильно понял) в чем может быть проблема?
вот код для главного меню
Код

void __fastcall TForm1::UndoClick(TObject *Sender)
{
Undo->ShortCut;
Image2->Picture->Assign(Clipboard()); //вызов сохраненного изображения из памяти
     ProgressBar1->Position = 0; //обнуление ProgressBar
}


и вот код который я записываю в обработчик быстрой кнопки

Код

void __fastcall TForm1::SpeedButton3Click(TObject *Sender) //кнопка отмены
{
 Undo->ShortCut;
Image2->Picture->Assign(Clipboard()); //вызов сохраненного изображения из памяти
     ProgressBar1->Position = 0;
}

сразу скажу, изображение я заношу в память перед поворотом...
Код

void __fastcall TForm1::RightClick(TObject *Sender)
{
Clipboard()->Assign(Image2->Picture);
 Right->ShortCut;
int J,JH,I,IH,mr,mg,mb;
......
 .........
}

в чем проблема, подскажите???

кстати, возникает эта ошибка только при запуске из самого борланда...если пролграмму скомпилировать и запустить потом как простую прогу, то никаких ошибок не возникает и все идет нормально!

Это сообщение отредактировал(а) susanin - 5.3.2007, 18:32
PM MAIL   Вверх
susanin
Дата 5.3.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вопрос с ошибкой решился!!!!!!smile  достаточно было добавить в программу процедуру освобождения буфера...  а вот 
как сделать, чтобы компилятор определял есть ли в компоненте Image рисунок??? 
этот вопрос остается открытым!!
PM MAIL   Вверх
_hunter
Дата 5.3.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



IMHO никак не сделать: компилятору абсолютно всеравно какие значения имеют поля класса (окромя статических членов). тут проще другим путем пойти...


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


Опытный
**


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

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



_hunter, каким? можешь подсказать? 
у меня была идея, сделать обработчик ошибки ....т.е. если в буфер ничего не занесено, то он бы выводил соответствующее сообщение об этом(а так выводится сообщение "Invalid Clipboard format"), но как это сделать я к сожалению никак не могу найти.... может вы знаете? там 
try{
}
catch
{
}
или что то в этом роде...

Это сообщение отредактировал(а) susanin - 5.3.2007, 20:07
PM MAIL   Вверх
_hunter
Дата 6.3.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



стоп. так тебе проверка где/для чего нужна? для Image'а или для Clipboard'а?
для второго можно GetClipboardFormatName/EnumClipboardFormats использовать (или их VCL аналоги) хотя судя по коду:
Цитата(susanin @  5.3.2007,  17:50 Найти цитируемый пост)
Clipboard()->Assign(Image2->Picture);

тебе достаточно перед Assign'ом Picture на NULL проверять...


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


Шустрый
*


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

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



Использование перехватчика исключений не поможет.
Код находящийся в try выполниться только во время исполнения программы.
Подумай как по другому сделать. Объясни постановку задачи
PM MAIL   Вверх
susanin
Дата 6.3.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(aldari @  6.3.2007,  12:43 Найти цитируемый пост)
Объясни постановку задачи 

вобщем такое дело! написана у меня программа, которая работате с изображениями bmp. есть на форме 2 компонента Image. в одном находится исходное изображение, во втором измененное. я хочу сделать отмену, для изменения изображения. т.е пользователь сделал изменение изображения, нажал отмену и оно вернулось к предыдущему виду. я это сделал используя буфер обмена..., но теперь надо сделать, чтобы при нажатии на отмену сразу после загрузки изображения на экран выводилось сообщение, говорящее, что изображение не изменялось. вот я подумал это сделать с помошью перехватчика исключений. 


_hunter, я написал вот так
Код

if (Image2->Picture==NULL)
{
ShowMessage("Картинка не изменялась");
}
else
Image2->Picture->Assign(Clipboard());

но ничего путнего не получилось...по прежнему выводится только сообщение программы "Invalid Clipboard format"...что я неправильно написал???


Это сообщение отредактировал(а) susanin - 6.3.2007, 20:18
PM MAIL   Вверх
_hunter
Дата 6.3.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(susanin @  6.3.2007,  20:15 Найти цитируемый пост)
 это сделал используя буфер обмена.

довольно оригинальное решение...

Цитата(susanin @  6.3.2007,  20:15 Найти цитируемый пост)
Image2->Picture->Assign(Clipboard());

а смысл тут проверять Picture? тут нужно формат буффера проверять...


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


Опытный
**


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

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



_hunter , а как это сделать?
PM MAIL   Вверх
aldari
Дата 7.3.2007, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile   smile  Я думаю здесь есть два решения:
1) сохранять копию твоего рисунка в объект TBitmap 
требуется много оперативной памяти 
2) если ты можешь описать изменения рисунка, то запоминай исходный рисунок и все изменения
после отмены применяй все изменения, кроме последнего к исходному
требется много процессорного времени

можно сделать их кобинацию: во втором случае делай копии после определенного числа изменений.

Всё зависит от того, какие действия ты проводишь с рисунком.

Кстати, с помощью TBitmap (оболочка для WIN API Bitmap) можно рисовать в памяти, а затем измененый рисунок выводить на Canvas, что намного быстрее.

Это сообщение отредактировал(а) aldari - 7.3.2007, 09:23
PM MAIL   Вверх
_hunter
Дата 7.3.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(susanin @  6.3.2007,  21:11 Найти цитируемый пост)
_hunter , а как это сделать?

примерно так:
Цитата(_hunter @  6.3.2007,  12:05 Найти цитируемый пост)
можно GetClipboardFormatName/EnumClipboardFormats использовать (или их VCL аналоги)




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


Опытный
**


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

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



aldari , не, не катит! мне надо проверять не изменение рисунка, а его появление в объекте Image....

_hunter , а можно пример кода использования GetClipboardFormatName/EnumClipboardFormats  smile ??????????
как например его применить для проверки буфера?
PM MAIL   Вверх
FFFFFFF7
Дата 8.3.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ну, так использовать поле Tag нельзя? ;) Если ужо загружено, Tag ставь в 1, коли нет - в 0, например.
--------------------
Да помоги кодеру, а значит - ближнему своему!
PM MAIL   Вверх
codelord
Дата 8.3.2007, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



Цитата(susanin @  7.3.2007,  19:15 Найти цитируемый пост)
 а можно пример кода использования GetClipboardFormatName/EnumClipboardFormats   ??????????как например его применить для проверки буфера?

Как нибудь так
TClipboard *pClip = Clipboard();
и соответственно
if(Clipboard()->HasFormat(CF_TEXT));
или
if(Clipboard()->HasFormat(CF_BITMAP));
ну или
звук
if(Clipboard()->HasFormat(CF_WAVE) );

Добавлено @ 00:50 
Цитата(susanin @  5.3.2007,  13:50 Найти цитируемый пост)
как сделать, чтобы компилятор определял есть ли в компоненте Image рисунок???

а если так
Код

if (Image1->Picture->Height || Image1->Picture->Width) Form1->Caption="Есть картинка";
else Form1->Caption="Нет картинки";




--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
susanin
Дата 8.3.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



codelord , отлично!!!! 5 баллов за подсказку! как раз то что надо!!! smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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