Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2010, 18:53   #11
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

Ясно, спасибо, пойду учиться и экспериментировать дальше.
killen вне форума Ответить с цитированием
Старый 22.02.2010, 18:09   #12
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

Начал потихоньку загонять все картинки в файл ресурсов через программку Image Editor, всё получается, но вот качество самой картинки при этом становится ужасной. При сохранении картинки использую 256 цветов. Можно как-нибудь сохранить все картинки, но без потери качества? Может есть какой-нибудь другой вариант зашить картинки в .exe файл, желательно в формате .jpg
Заранее спасибо.
killen вне форума Ответить с цитированием
Старый 22.02.2010, 19:10   #13
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

В общем разобрался как в файл ресурсов добавить .jpg файлы, всё сделал, начал их заменять в программе следующим образом:
Код:
procedure LoadJPEGFromRes(TheJPEG : string; ThePicture : TPicture);
var
	ResHandle : THandle;
	MemHandle : THandle;
	MemStream : TMemoryStream;
	ResPtr    : PByte;
	ResSize   : Longint;
	JPEGImage : TJPEGImage;
begin
	ResHandle := FindResource(hInstance, PChar(TheJPEG), 'JPEG');
	MemHandle := LoadResource(hInstance, ResHandle);
	ResPtr    := LockResource(MemHandle);
	MemStream := TMemoryStream.Create;
	JPEGImage := TJPEGImage.Create;
	ResSize := SizeOfResource(hInstance, ResHandle);
	MemStream.SetSize(ResSize);
	MemStream.Write(ResPtr^, ResSize);
	FreeResource(MemHandle);
	MemStream.Seek(0, 0);
	JPEGImage.LoadFromStream(MemStream);
	ThePicture.Assign(JPEGImage);
	JPEGImage.Free;
	MemStream.Free;
end;
И заменил загрузку рисунка:
Код:
begin
ImgBtn1.Glyph.LoadFromFile(extractfilepath(paramstr(0))+'images\SPressed.bmp');
end;
На:
Код:
Begin
LoadJPEGFromRes('SETPR', Image1.Picture);
end;
Всё работает, но смена изображения при наведении не происходит, вероятнее всего дело в том, что нужно использовать следующий код:
Код:
Begin
ImgBtn1.Glyph.LoadJPEGFromRes('SETPR', Image1.Picture);
end;
Но, если делать так, то выдает ошибку:
Цитата:
[Error] UnitMain.pas(495): Undeclared identifier: 'LoadJPEGFromRes'
Как можно исправить ошибку?
killen вне форума Ответить с цитированием
Старый 22.02.2010, 23:00   #14
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вы упорно не хотите использовать предложенное
ImgBtn1.Canvas.Draw(0, 0, LoadJpegRes('SONMOUSE')); ?
И похоже, вы что-то с ресурсами не то делаете...
Поищите по форуму про создание файла ресурсов.
А то вы что-то там такое накрутили...
mihali4 вне форума Ответить с цитированием
Старый 23.02.2010, 15:19   #15
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

Файл ресурсов я делал по следующему руководству - Как поместить JPEG-картинку в exe-файл и потом загрузить ее?

Насчет предложенного вами метода, то я бы с радостью его использовал, но при попытке загружать изображения таким способом появляется ошибка
Цитата:
[Error] UnitMain.pas(355): Undeclared identifier: 'Canvas'
[Error] UnitMain.pas(355): Undeclared identifier: 'LoadJpegRes'
Причем в uses присутствует jpeg.
Так же я заметил что программка не умеет работать с jpeg изображениями вообще, попробовал я в изображении (image1) вместо .bmp файла использовать .jpg, всё вроде нормально, в значении Picture (TBitmap), сменился на (TJPEGImage), программка компилируется, но самого окна нету, оно невидимое, но оно есть. Почему так, я не знаю.
killen вне форума Ответить с цитированием
Старый 24.02.2010, 17:46   #16
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

Михалыч, спасайте, уже не знаю что делать, застопорился на этом и всё, не хочет он с jpg форматом нормально работать, хоть ты тресни. Был бы очень благодарен если бы помогли.
killen вне форума Ответить с цитированием
Старый 25.02.2010, 14:03   #17
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так мы ж вроде договорились - ImgBtn1 - это не кнопка, а TImage, у него есть канва и никаких проблем с жипегами...
mihali4 вне форума Ответить с цитированием
Старый 25.02.2010, 14:46   #18
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

Так, все кнопки переделал в TImage. Создаю файл ресурсов следующим образом:
В папке с .jpg рисунками создал файл imgjpg.rc и добавил в него все файлы следующим образом
Код:
CLOSE   JPEG       Close.jpg
И так со всеми файлами, потом с помощью файлика brcc32.exe создаю сам файл ресурсов. Всё создалось, появился файл imgjpg.res, кидаю этот файлик в папку с проектом.
Теперь в самой программе начинаю загружать эти рисунки следующим образом:
Код:
ImgBtn1.Canvas.Draw(0, 0, LoadJpegRes('SONMOUSE'));
Вместо
Код:
ImgBtn1.Glyph.LoadFromFile(extractfilepath(paramstr(0))+'images\SOnMouse.bmp');
Начинаю компилировать, выдаёт ошибку:
Цитата:
[Error] UnitMain.pas(309): Undeclared identifier: 'LoadJpegRes'
И вот как исправить эту ошибку?
И ещё хотел спросить, я файл ресурсов правильно создаю? Потому что если я открываю потом его через Image Editor, то у меня там вот такая ерунда (скрин приложил к посту).
Изображения
Тип файла: jpg res.jpg (11.4 Кб, 68 просмотров)
killen вне форума Ответить с цитированием
Старый 25.02.2010, 15:02   #19
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Елки-палки, я ж вам саму функцию не дал...
Вот она:
Код:
function LoadJpegRes(const ID: string): TJpegImage;
var
  RS: TResourceStream;
begin
  Result := TJpegImage.Create;
  RS := TResourceStream.Create(HInstance, ID, RT_RCDATA);
  try
    RS.Seek(0, soBeginning);
    Result.LoadFromStream(RS);
  finally
    RS.Free;
  end;
end;
Пардон...
mihali4 вне форума Ответить с цитированием
Старый 25.02.2010, 15:27   #20
killen
Пользователь
 
Регистрация: 07.02.2010
Сообщений: 17
По умолчанию

Большое спасибо, теперь ошибок при компиляции нету.
Но всё же у меня что-то не то с файлом ресурсов, пытаюсь навести мышкой на какую-нибудь кнопку, и выкидывает ошибку (скрин прикрепил).
Пробовал так же в файле ресурсов вместо JPEG:
Код:
CLOSE   JPEG       Close.jpg
Писать RCDATA:
Код:
CLOSE   RCDATA       Close.jpg
Но всё равно такая же ошибка.
Изображения
Тип файла: jpg res.jpg (23.4 Кб, 69 просмотров)
killen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание кнопок Alenkakiss Помощь студентам 4 07.06.2009 18:20
Создание кнопок 3D Active Button Magic aiswork Софт 1 28.05.2009 00:53
По нажатию обеих кнопок мыши выход из программы Slash3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 05.04.2009 00:47
создание кнопок на сайте plaksa HTML и CSS 2 17.12.2008 15:42
Создание кнопок на лету gabin Компоненты Delphi 2 11.05.2008 15:30