Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 799
от 04.05.2007, 02:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 465, Экспертов: 88
В номере:Вопросов: 5, Ответов: 11


Вопрос № 84546: Подскажите пожалуйста! Как закомпелировать картинки в ЕХЕ программы? Чтобы не таскать картинки отдельно от программы....
Вопрос № 84593: Уважаемые эксперты! подскажите пожалуйста как открыть файл на котором стоит флаг в dbgride. я пробовал и createprocess и shelexecute но каждый раз пишет "there was an error opening this document. The file does not exist." ил...
Вопрос № 84606: я бы хотел сам научиться писать программы но абсолбтно не знаю как этому можно научится, желательно самостоятельно а то я много работаю...
Вопрос № 84610: Уважаемые эксперты возникла проблема. Как можно программно добавить дочерние элементы в Treeview, если родительские элементы заданы через Инспектор. Список дочерних элементов формируется при создании формы. Если можно с кодом. Заранее бла...
Вопрос № 84642: Здраствуйте ! ув Експерты Подскажите плз как упрятать ини файл от посторонних глаз ?ну например зашифровать чтоли ! Заранее спасибо !...

Вопрос № 84.546
Подскажите пожалуйста! Как закомпелировать картинки в ЕХЕ программы? Чтобы не таскать картинки отдельно от программы.
Отправлен: 28.04.2007, 10:02
Вопрос задал: Bee.line (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Вадим Витомский
Здравствуйте, Bee.line!
Прилинковать их как отдельный ресурс, можно даже создать специальную DLL с необходимыми ресурсами (картинки, иконки, курсоры и т.д.) и использовать ее одновременно несколькими програмамми. Информацию об этом можно прочитать в http://www.realcoding.net/teach/Delphi7_prof/Glava28/Index14.html и в http://samouchka.net/2007/04/25/ispolzovanie_i_sozdanie_dll_v_delphi.html
Ответ отправил: Вадим Витомский (статус: 6-ой класс)
Ответ отправлен: 28.04.2007, 10:19

Отвечает: Gh0stik
Здравствуйте, Bee.line!

Вам достаточно будет прочитать две такие статьи:
Компиляция ресурсов
Загрузка изображения или курсора из RES-файла

В них достаточно полно и ясно описано как решить Вашу задачу и какие действия необходимо выполнить, чтобы добиться результата.

И в качестве примера прилагаю исходник программы которая использует контент в виде рисунков и текста из ресурса (сами же файли которые были откомпелированы в ресурс не прилагаю).

Good Luck!!!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 28.04.2007, 10:42

Отвечает: DimonSoft
Здравствуйте, Bee.line!
Насколько я поня, DLL - это не вариант. Поэтому...

Запустите программу для создания res-файлов. Я предпочитаю ResEdit. Создаёте новый RES-файл, добавляете в него всё, что Вам нужно. Сохраняете в папку с Вашей программой (или любую другую, в которой компилятор найдёт этот файл). В программе прописываете директиву {$R ИмяФайла.res}. Всё...

Теперь о том, как их загрузить... Вариантов несколько. Можно воспользоваться объектом TResourceStream. Приблизительно так...

procedure LoadJPEGfromEXE;
var
MyJPG : TJPEGImage; // Объект - JPEG
ResStream : TResourceStream; // Объект - поток ресурсов
begin
try
MyJPG := TJPEGImage.Create;
ResStream := TResourceStream.CreateFromID(HInstance, 1, RT_RCDATA);
MyJPG.LoadFromStream(ResStream); // Что!? Да, это просто!
Canvas.Draw(12,12,MyJPG); // сделайте это, чтобы увидеть что это действительно работает!
finally
MyJPG.Free;
ResStream.Free;
end;
end;

Это, наиболее универсальный вариант. Посложнее, но на WinAPI это делается по-другому: сначала функцией FindResource получаем идентификатор ресурса, потом вызываем LoadResource. Результат выполнения последней функции - указатель на место ресурса в памяти.

Кроме того, например, воспроизведение звуков (забегая вперёд) в формате WAVE, добавленных в ресурсы программы, возможно путём вызова функции PlaySound(), с указанием соответствующих параметров. Ещё одно... В DirectX (по крайней мере 9-ой версии) загрузка текстур из ресурсов обеспечивается путём вызова соответствующей процедуры (кстати, что меня в своё время порадовало: берёт PNG).

И касательно картинок. Их можно засунуть в TImage'и, а потом оттуда доставать, хотя, конечно, это не лучший вариант.

P.S. При добавлении ресурсов рекомендую использовать JPEG или PNG, чтобы сократить размер EXE-файла (именно из-за этого поддержка PNG меня и порадовала).
Ответ отправил: DimonSoft (статус: 1-ый класс)
Ответ отправлен: 28.04.2007, 10:54

Отвечает: Iksmensp
Здравствуйте, Bee.line!
Можно добавить эти картинки в imagebox и загружать от туда
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 28.04.2007, 12:09


Вопрос № 84.593
Уважаемые эксперты!
подскажите пожалуйста как открыть файл на котором стоит флаг в dbgride.
я пробовал и createprocess и shelexecute но каждый раз пишет
"there was an error opening this document. The file does not exist."
или ставил символ **** открывает беспорядочно файлы, не тот на который кликаешь.

Заранее спасибо!

Приложение:

Отправлен: 28.04.2007, 15:15
Вопрос задал: Kakenov Daulet (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Вадим Витомский
Здравствуйте, Kakenov Daulet!
Попробуйте вместо
a:=dbaltgrid1.Fields[0].Value
присвоить значение конкретного файла для проверки правильно ли работает ShellExecute.
Насколько я понимаю, имена файлов необходимо брать из базы данных. В таком случае, можно попробовать обращаться по имени поля, а не по номеру:
a:=dbaltgrid1.FieldsByname('имя_поля_в_котором_хранятся_имена_файлов').AsString
Ответ отправил: Вадим Витомский (статус: 6-ой класс)
Ответ отправлен: 28.04.2007, 15:41
Оценка за ответ: 5


Вопрос № 84.606
я бы хотел сам научиться писать программы но абсолбтно не знаю как этому можно научится, желательно самостоятельно а то я много работаю
Отправлен: 28.04.2007, 17:16
Вопрос задал: Nemirof (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: W@NDeReR
Здравствуйте, Nemirof!
Почитайте книгу Михаил Фленов Библия Delphi я по ней учился
или www.delphiworld.narod.ru много интересных статей
---------
Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 3-ий класс)
Ответ отправлен: 28.04.2007, 18:40
Оценка за ответ: 4
Комментарий оценки:
очень хороший ответ но не супер

Отвечает: Diman Soldatov / DES
Здравствуйте, Nemirof!
Читай литературу, книжки умные на эту тему. для тех кто ничего незнает и хочет начать лучше всего подойдет серия для чаников не в обиду будет сказано просто там все разложено и поняятно самое основное.
Ответ отправил: Diman Soldatov / DES (статус: 1-ый класс)
Ответ отправлен: 28.04.2007, 19:39
Оценка за ответ: 4

Отвечает: DimonSoft

Ответ удален, по одной из указанных причин:
- пустой;
- неверный;
- вредный;
- не соответствует вопросу
и помещен для обсуждения в ветку форума
"О деятельности экспертов и работе портала/Удаленные ответы для обсуждения"

=========================
deepTeNk
Ответ отправил: DimonSoft (статус: 1-ый класс)
Ответ отправлен: 28.04.2007, 21:42


Вопрос № 84.610
Уважаемые эксперты возникла проблема.
Как можно программно добавить дочерние элементы в Treeview, если родительские элементы заданы через Инспектор. Список дочерних элементов формируется при создании формы.
Если можно с кодом.
Заранее благодарен.
Отправлен: 28.04.2007, 18:15
Вопрос задал: Лёхус (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Устинов С.Е.
Здравствуйте, Лёхус!

Добавить дочерние легко. Допустим, у Вас есть TreeView1 и Вам нужно для 2-го родительского элемента добавить два дочерних элемента

TreeView1.Items.AddChild(TreeView1.Items.Item[1],'Имя первого дочернего элемента');
TreeView1.Items.AddChild(TreeView1.Items.Item[1],'Имя второго дочернего элемента');

Или же с помощью

TreeView1.Items.AddChildFirst(TreeView1.Items.Item[1],'Имя второго дочернего элемента');

При использовании функции AddChild дочерний компонент будет добавляться самым последним дочерним элементом для данного родительского, а при использовании AddChildFirst он будет самым первым в списке.

Не забудьте, что элементы нумеруются начиная с 0, т.е. если нужно к первому родительскому элементу добавить дочерний нужно писать

TreeView1.Items.AddChild(TreeView1.Items.Item[0],'Имя первого дочернего элемента');

Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Практикант)
Ответ отправлен: 28.04.2007, 19:19
Оценка за ответ: 4
Комментарий оценки:
Извеняюсь , может не совсем точно описал проблему.
Добавить дочерний элемент не проблема, для меня проблема добавить дочерний элемент в НУЖНЫЙ ДЛЯ МЕНЯ РОДИТЕЛЬСКИЙ элемент ... при условии что добовлять я буду не из обработчика событий Treeview.

Отвечает: PGM
Здравствуйте, Лёхус!

Полагаю в этом случае стоит использовать процедуру рекурсивного обхода дерева и сравнение по известной информации (обычно по тексту или по Data, который можно использовать как тэг или хранить в нем ссылки на объекты).

Код поиска для сравнения по тексту приблизительно такой

function FindItem(const sName: String; ARoot : TTreeNode): TTreeNode;
var ANode : TTreeNode;
begin
ANode := ARoot.GetFirstChild;
while Assigned(ANode) do begin
if sName = ANode.Text then begin
Result := ANode;
Exit;
end else begin
Result := FindItem(sName, ANode);
if Assigned(Result) then Exit;
end;
ANode := ANode.GetNext;
end;

Result := nil;
end;
Ответ отправил: PGM (статус: 5-ый класс)
Ответ отправлен: 30.04.2007, 01:57
Оценка за ответ: 5


Вопрос № 84.642
Здраствуйте ! ув Експерты
Подскажите плз как упрятать ини файл от посторонних глаз ?ну например зашифровать чтоли !
Заранее спасибо !
Отправлен: 29.04.2007, 00:12
Вопрос задал: VaNuk (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архангельский Андрей Германович
Здравствуйте, VaNuk!

Есть такой компонент - datafile, который работает с файлом .ini и имеет расширенные функции, в том числе и шифрование файла .ini.
Установки не требует - просто включи в Uses
Компонент прикреплен

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО

Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 29.04.2007, 11:01


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 (beta) от 02.05.2007
Яндекс Rambler's Top100

В избранное