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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2009, 00:32   #1
Мария Алексеевна
 
Аватар для Мария Алексеевна
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию Не загружаются картинки .ico

Здравствуйте, у меня проблема. Я пишу программу создания иконок (пиктограмм). Я описала процедуру сохранения файла в *.ico, но в моей программе сохранённые таким образом иконки не открываются, при этом в проводнике они открываются и просматриваются свободно.
Ошибка возникает уже при выборе файла путем нажатия на него один раз

Процедура открытия файла:
Код:
begin
     if SPDialog.Execute then
    if SPDialog.FileName<>'.ico' then
          Image.SaveToFile(SPDialog.FileName+'.ico');
end;

Процедура сохранения файла:
begin
  if OPDialog.Execute then begin
    LoadIconFile(Image,OPDialog.FileName);
    RefreshPalette;
    RefreshGrid;
  end;
end;
З.Ы. Иконки, уже имеющиеся на компьютере, открываются нормально.

Ай нид хелп!

Последний раз редактировалось Stilet; 04.11.2009 в 07:55.
Мария Алексеевна вне форума Ответить с цитированием
Старый 04.11.2009, 01:06   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, наверное, все-таки - наоборот. Это я про открытие и сохранение файла.

Код:
if SPDialog.FileName<>'.ico' then
Тогда уж резоннее
Код:
if Trim(SPDialog.FileName)<>'.ico' then
A вообще, впечатление такое, что вы уверены, будто бы достаточно сменить расширение на ICO и любая картинка станет иконкой.
Спешу вас разочаровать...

З.Ы. Не забывайте, что внизу есть "Похожие темы". Можете почерпнуть немало полезного...

Последний раз редактировалось mihali4; 04.11.2009 в 01:19.
mihali4 вне форума Ответить с цитированием
Старый 04.11.2009, 01:30   #3
Мария Алексеевна
 
Аватар для Мария Алексеевна
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию

ну, не любая) разрешением 32х32, например.
а функции да, перепутала при копировании названия
Мария Алексеевна вне форума Ответить с цитированием
Старый 04.11.2009, 04:18   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сохраняете BMP формат а грузите ICO
разница то есть для Делфи...а проводник просто по заголовку все понимают.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.11.2009, 07:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ошибка возникает уже при выборе файла путем нажатия на него один раз
Какая ошибка то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2009, 08:07   #6
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

O сохранении иконок 32х32
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 05.11.2009, 00:14   #7
Мария Алексеевна
 
Аватар для Мария Алексеевна
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию

Project Projet1.exe raised exception class EInvalidGraphic with message "Icon image is not valid".
вот такая ошибка.
посмотрела ссылку, спасибо, конечно, но я там никогда в жизни не разберусь
А как-нибудь попроще нельзя сделать, чтобы оно сохранялось нормально?
Мария Алексеевна вне форума Ответить с цитированием
Старый 05.11.2009, 00:40   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Как преобразовать bmp (32x32) в ico
Код:
unit main;

interface

uses
windows, messages, sysutils, classes, graphics, controls,
forms,dialogs,extctrls, stdctrls;

type
tform1 = class(tform)
button1: tbutton;
image1: timage;
image2: timage;
procedure button1click(sender: tobject);
procedure formcreate(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;

var
form1: tform1;

implementation

{$r *.dfm}

procedure tform1.button1click(sender: tobject);
var windc, srcdc, destdc : hdc;
oldbitmap : hbitmap;
iinfo : ticoninfo;
begin
geticoninfo(image1.picture.icon.handle, iinfo);
windc := getdc(handle);
srcdc := createcompatibledc(windc);
destdc := createcompatibledc(windc);
oldbitmap := selectobject(destdc, iinfo.hbmcolor);
oldbitmap := selectobject(srcdc, iinfo.hbmmask);
bitblt(destdc, 0, 0, image1.picture.icon.width,
image1.picture.icon.height,
srcdc, 0, 0, srcpaint);
image2.picture.bitmap.handle := selectobject(destdc, oldbitmap);
deletedc(destdc);
deletedc(srcdc);
deletedc(windc);
image2.picture.bitmap.savetofile(extractfilepath(application.exename)
+ 'myfile.bmp');
end;

procedure tform1.formcreate(sender: tobject);
begin
image1.picture.icon.loadfromfile('c:\myicon.ico');
end;

end.
mihali4 вне форума Ответить с цитированием
Старый 14.11.2009, 20:26   #9
Мария Алексеевна
 
Аватар для Мария Алексеевна
 
Регистрация: 04.11.2009
Сообщений: 6
По умолчанию

почему-то у меня ощущение, что тут наоборот, преобразование bmp->ico, потому что при создании формы грузится .ико, а в конце процедуры сохраняется .бмп
Мария Алексеевна вне форума Ответить с цитированием
Старый 14.11.2009, 21:37   #10
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Я думаю что Вы уже убедились, что сохранение иконки не такое простое дело.
Есть решение.
Нужно пройти по ссылке:

(ОДИНОЧЕСТВО В СЕТИ скинула)
http://www.delphisources.ru/pages/fa...ve_32_ico.html

И оформить этот код в модуль, а потом вызывать когда надо.
Создать всего одну процедуру.. Например:

Procedure SaveIcon(IFile:TImage ; PathS:String);
Где IFile - это Image который нужно сохранить, а PathS - это путь для сохранения.

Вызывать вот так:
SaveIcon(Image1, 'C:\254.ico');

Тогда программа вобще становиться примитивной. Дописываете простенький графический редактор и у Вас то, что хотелось.

Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Randomize;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Brush.Color := RGB(Random(256), Random(256), Random(256));
Image1.Canvas.Rectangle(0, 0, 32, 32);
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
Image1.Canvas.Brush.Color := RGB(Random(256), Random(256), Random(256));
Image1.Canvas.Rectangle(0, 0, 32, 32);
End;

Procedure TForm1.Button2Click(Sender: TObject);
Begin
SaveIcon(Image1, 'C:\254.ico');
End;
Пример в приложении.
Вложения
Тип файла: rar 9.rar (11.3 Кб, 21 просмотров)

Последний раз редактировалось Вавел из ГМТУ; 14.11.2009 в 21:50.
Вавел из ГМТУ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bmp в ico AngelOfDeath Мультимедиа в Delphi 9 30.12.2008 06:21
Корректное сохранение Ico Nester Общие вопросы Delphi 1 25.12.2008 19:50
PSD в ICO vinni Мультимедиа в Delphi 10 03.10.2008 16:52
Конвертация ICO в BMP DeDoK Общие вопросы Delphi 5 15.07.2008 23:44
Ico Zeraim Мультимедиа в Delphi 8 22.05.2008 09:11