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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 237
от 13.09.2005, 21:48

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


Вопрос № 26026: Привет всем Экспертам! У меня вопросы такого плана. 1) Как сохранить в файл или в ImageList, да хотя бы в переменную, картинку составленую с помощью операции: for csh_1:=0 to MAPGlobal.Width do for csh_2:=0 to MAPGlobal.Height do b...
Вопрос № 26051: В некоторых приложениях изображения хранятся в PNG в Дельфи компонент TImage не позволяет использовать PNG как же это делается? Или есть какие альтернативы!...
Вопрос № 26055: Podskazhite pls kak pravil'no rabotat' s WideString, kakie est' funkcii, ili tochnee s unicodom. Moja proga dolzhna rabotat' so vsemi kodirovkami, to esti pod kakoi raskladkoi klavy ne pishi (v riche), vse bukvy dolzhny budut vidny normal'no. Na...
Вопрос № 26058: Приветствую всех экспертов!!! У меня несколько вопросов на которые хотелось бы получить ответы, если это вас не затруднит. Вопрос1: Как подключить библиотеку т.е. она лежит в одной папке а проэкт совсем в другой папке. Я подключаю е...
Вопрос № 26067: Как можно читать (изменять) данные, передаваемые в/из COM-порта другим процессом ?...

Вопрос № 26.026
Привет всем Экспертам! У меня вопросы такого плана.
1) Как сохранить в файл или в ImageList, да хотя бы в переменную, картинку составленую с помощью операции:
for csh_1:=0 to MAPGlobal.Width do
for csh_2:=0 to MAPGlobal.Height do
begin
case MAPGlobal.MasMAP[csh_2,csh_1].Tail of
1 : cc.Draw(csh_1*50, csh_2*50, Form1.Image1.Picture.Bitmap);
2 : cc.Draw(csh_1*50, csh_2*50, Form1.Image2.Picture.Bitmap);
3 : cc.Draw(csh_1*50, csh_2*50, Form1.Image3.Picture.Bitmap);
4 : cc.Draw(csh_1*50, csh_2*50, Form1.Image4.Picture.Bitmap);
else cc.Draw(csh_1*50, csh_2*50, Form1.Image3.Picture.Bitmap);
end;
end;
2) И почему после выполнения этого кода в TForm1.FormKeyPress(Sender: TObject; var Key: Char);
Состакленная картинка мигнет и пропадает?
Отправлен: 08.09.2005, 06:26
Вопрос задал: Puld (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Puld!
1) Было бы неплохо знать, что такое MAPGlobal, cc и тому подобные вещи.
Если рисуем на TImage, то сохранить можно так:
TImage.Picture.SaveToFile('Имя_файла');
2) Мигает, скорее всго потому, что идет перерисовка. Хотя черт его знает. Видимо что-то не так в коде.
В любом случае, надо было написать тип Ваших объектов, а то поди догадайся, с чем Вы работаете. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 08.09.2005, 07:26

Отвечает: Jadd
Здравствуйте, Puld!
1)Либо напрямую использовать WinAPI и писать сначала заголовок (BITMAPINFOHEADER), либо использовать метод SaveToFile компонента, на котором рисуешь.

2)А потому что, нужно перерисовывать картинку каждый раз, как окно программы перерисовывается. Вставь отрисовку картинки в метод OnPaint формы, на которой картинка лежит.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 08.09.2005, 09:14


Вопрос № 26.051
В некоторых приложениях изображения хранятся в PNG в Дельфи компонент TImage не позволяет использовать PNG как же это делается? Или есть какие альтернативы!
Отправлен: 08.09.2005, 16:39
Вопрос задал: Малярчук Андрей (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, Малярчук Андрей!
Стандартный TImage не поддерживает png. Необходимы сторонние компоненты. Посмотрите на torry.net. Также на сайте http://www.imagemagick.com есть библиотека imagemagick с исходниками для дельфи. Попробуй использовать ее.
---------
Тише едешь, дальше будешь... от того места куда едешь
Ответ отправил: Rusland (статус: Студент)
Отправлен: 08.09.2005, 16:59

Отвечает: Jadd
Здравствуйте, Малярчук Андрей!
Есть вариант, кроме torry.net, написать самому компонент, который рисует png на TImage или TBitmap, что не принципиально. На www.codenet.ru есть описание форматов файлов. PNG там тоже должен быть.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 08.09.2005, 17:14

Отвечает: sir henry
Здравствуйте, Малярчук Андрей!
Вот, например, компоненты, поддерживающие много форматов, в том числе и PNG:
http://www.torry.net/tools/graph/imagetools/atimager.exe
http://www.torry.net/tools/graph/other/glyfx_common_install.exe
http://www.torry.net/vcl/graphics/packs/imagefilelib.zip
http://www.torry.net/apps/editors/graphicseditors/PictureView1.1.zip
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 08.09.2005, 17:33

Отвечает: Romodos
Здравствуйте, Малярчук Андрей!
Надо искать модуль или компонент для работы с форматом PNG - Portable Network Graphics. Большой выбор компонентов на http://www.torry.net/
---------
FAQ me off!
Ответ отправил: Romodos (статус: 6-ой класс)
Отправлен: 08.09.2005, 20:06

Отвечает: Anefedov
Здравствуйте, Малярчук Андрей!
Альтернатива PNG - GIF.
Альтернативы TImage - не знаю
Ответ отправил: Anefedov (статус: 5-ый класс)
Отправлен: 12.09.2005, 17:06


Вопрос № 26.055
Podskazhite pls kak pravil'no rabotat' s WideString, kakie est' funkcii, ili tochnee s unicodom.
Moja proga dolzhna rabotat' so vsemi kodirovkami, to esti pod kakoi raskladkoi klavy ne pishi (v riche), vse bukvy dolzhny budut vidny normal'no. Nashol komponent TntRichEdit kotoryi ochen' dazhe vseo eto delaet, no problema uzhe v hranenie napisannogo texta v "untyped file", utochu: dlia sohranenia v fail k textu dobjvliaetsia koekakaja infa i uzhe potom nuzhno ego sohranit'. Proboval blockwrite i blockread, no unicodnye karakuly hraniatsa ne normal'no (a s stringom vsio rabotaet kak nado).
Отправлен: 08.09.2005, 17:52
Вопрос задал: Negruzzi Cristian (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Negruzzi Cristian!
Хорошая книга естьу Джеффри Рихтера: "Программирование приложений Win32" (по-моему так). Там он очень популярно рассказывает про юникод с примерами WinApi.
Кто мешает тебе сохранять твои юникодстроки стандартными средствами ввода-вывода паскаля или винды через winapi? Там вообще по боку какого размера данные и какого типа (тем более). Указываешь при вызове WriteFile переменную нужного типа и размерность в байтах и пиши посимвольно, а в конец, например, пиши твою инфу. Нужен пример на Winapi - давай мыло, пришлю.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 08.09.2005, 18:07

Отвечает: sir henry
Здравствуйте, Negruzzi Cristian!
А чем Вы каракули увидели? Может это Ваш просмоторщик юникод не понимает? Тогда дело не в программе.
Сохранение файла. Не надо из RichEdit'а сохранять в нетипизированый файл. Для сохранения есть специальный метод:
RichEdit1.Lines.SaveToFile('Имя_файла');
По умолчанию текст сохраняется в формате RTF, хранимое в файле от кодировки независит.
WideString Delphi поддерживает вполне нормально. Проблема может возникнуть только с наличием соответствующих шрифтов, но это уже проблемы ОС, а не Дельфи.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 09.09.2005, 05:24


Вопрос № 26.058
Приветствую всех экспертов!!!

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

Вопрос1: Как подключить библиотеку т.е. она лежит в одной папке а проэкт совсем в другой папке. Я подключаю ее в uses и при запуске проэкта мне выдается сообщение что библиотека отсутствует. Эту библиотеку создаю я сам.

Вопрос2: Как программно можно перевести из двоичниой системы в восмеричную и шестнадцатиричную или может легче переводить из десятичной, но как тогда быть с буквами которые есть в шестнадцатиричной системе, а то я мучаюсь с двоичной системой. Если можно то с кодом перевода. Зарание благодарен за ответ на этот вопрос. У меня получилось только перевисть из десятичной в двоичную.

Вопрос3: Как сделать плавный выезд окна т.е. к главной форме подключить вторую форму которая в последствии в проэкте по нажатии кнопки плавно выезжала например: с правой строны. Если можно с куском кода.

Зарание всем спасибо за ответы на мои вопросы!!!

С Уважением,
ко всем экспертам Ujin Antikvar!!!
Отправлен: 08.09.2005, 18:59
Вопрос задал: Ujin Antikvar (статус: 1-ый класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Ujin Antikvar!
1) Что за библиотека? В каком она виде? Если в виде dcu, тогда проблема решается просто. Нужно в свойствах проекта указать путь к папке, где лежит dcu-шник. Если lib, то тут нужно включить в проект этот либ.

2) Очень просто. В шестнадцатиричный вид просто. Есть функция Format. Она получает типа Ordinal (по-моему) и возвращает строку согласно символам форматирования. Там есть символ x . Вот этот символ и указывает на преобразование. Из десятичной в любую систему можно так же перевести вот как:
делим сначала число на основание системы, потом циклично делим результат от первого деления на основание и так далее пока результат не станет равным нулю.

например двоичная система:

repeat

nDiv = Num div 2;
nMod = Num mod 2;
Num = nDiv;

until Num > 0;

Один момент. То, что получится в nMod нужно куда-то сохранять иначе на следующей итерации значение будет переписано. А результат перевода перевернуть, дабы сохранить порядок обхода. Это уже тривиальная задача и решается весьма просто. Тоже самое с 16-чной, но тут нужно проверять на значение, чтобы вовремя его заменять на символы.

3)Есть стандартные компоненты. А можно просто менять размер в цикле от нуля до нужного размера.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 08.09.2005, 19:34

Отвечает: Romodos
Здравствуйте, Ujin Antikvar!
Ответы
1) Надо зайти в Project->Options->Directories/Conditionals и в поле Search Path прописать путь к вашей библиотеке, тогда всё заработает
2)См. приложение (Usage: bin2hex('10010');) Функции очень просты и практически идентичны. Я их прямо щас накатал, как вы задали вопрос
3)См приложение
Form1 - главная форма, Form2 - дополнительная
Timer - это таймер. интервал сами настроите

Приложение:

---------
FAQ me off!

Ответ отправил: Romodos (статус: 6-ой класс)
Отправлен: 08.09.2005, 20:01
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо вы очень мне помогли!!!

Отвечает: mvp
Здравствуйте, Ujin Antikvar!
1. Меню project->options...->Directories/Conditionals вставьте путь в Search Path и Debug Source Path.
2. См. приложение (на форме Edit1 - для ввода двоичного числа и Button1 для выполнения перевода, два RadioButton'а для вібора системы счисления - 8-я или 16-я, и Label для получения результата). Недостаток: не учтены отрицательные числа.
3. Вставьте в событие onActivate (или onShow) второй формы следующий код:
procedure TForm2.FormActivate(Sender: TObject);
var k, i, j : integer;
begin
k := Height;
j := WIdth;
i := 0;
while i < j do
begin
Width := i;
Height := trunc(i * k / j);
inc(i, 10);
sleep(10); //в зависимости от компьютера нужно регулировать
end;
Width := j;
Height := k
end;

Приложение:

---------
Моя совесть чиста - не бывшая в употреблении

Ответ отправил: mvp (статус: 4-ый класс)
Отправлен: 08.09.2005, 20:19
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!!!

Отвечает: Delphin
Здравствуйте, Ujin Antikvar!
1) Библиотеку???? Может модуль??? Если модуль то uses u_you in '../../dir/u_uoy.pas'; Если нет то загружай динамически или путь указывай с "../" ...
3) Помогу тееорией. Тебе нужно создать форму, с шириной 0, а потом увеличивать шерину одновременно допустим перемещая форму если она справа.

---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: 10-ый класс)
Отправлен: 08.09.2005, 21:21

Отвечает: sir henry
Здравствуйте, Ujin Antikvar!
1. Для начала давайте определимся с терминами. Библиотека - это не модуль паскаля, который подключается в строке USES. Библиотека - это файл с расширением DLL, для работы с которым есть несколько специальных функций, извлекающих то, что в этой DLL'ке заложено:
var
MyLib: THandle;
NetShareEnum: function(): DWORD; stdcall;
Begin
MyLib:= LoadLibrary('NETAPI32.DLL'); {Загружаем нужную нам библиотеку}
NetShareEnum := GetProcAddress(MyLib,'NetShareEnum'); {Получаем адрес нужной функции из библиотеки}
NetShareEnum(); {Используем эту функцию в своей программе}
FreeLibrary(MyLib); {Выгружаем библиотеку}
End;
2. Перевод в разные системы счисления. Вот если честно, весь интернет забит такими примерами. Совершенно непонятно, почему могут быть затруднения с этим. :)
Перевод из двоичной системы в восьмиричную или шестнадцатиричную, это вообще плевое дело (в отличие от десятичной системы).
В шестнадцатиричную систему. Привожу самый наглядный принцип, т.к. он исключительно понятен.
- Переводите число в строку.
- Разбиваете строку на подстроки по 4 разряда.
3. Пользуетесь такой таблицей:
0000 - 0
0001 - 1
0001 - 1
0010 - 2
0011 - 3
0100 - 4
0101 - 5
0110 - 6
0111 - 7
1000 - 8
1001 - 9
1010 - A
1011 - B
1100 - C
1101 - D
1110 - E
1111 - F
4. Собираете подстроки обратно в одну строку и конвертируете обратно в число.
В восьмиричную систему тоже самое, только там разбивать надо по три разряда.
*******
Для перевода из двоичной в шестнадцатиричную систему есть стандартная функция BinToHex().
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 09.09.2005, 06:00
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Ерёмин Андрей
Здравствуйте, Ujin Antikvar!
1. В окне Tools - Environment Options на вкладке Library допишите в Library path каталог, в котором находится ваш модуль и тогда компилятор его найдёт.
3. Самый простой вариант - изменять Left и Top формы в цикле, делаю некоторую задержку. Это и создаст эффект выезда.
---------
Мышка побежала, xвостиком махнула - cервер упал...
Ответ отправил: Ерёмин Андрей (статус: Практикант)
Отправлен: 09.09.2005, 07:20

Отвечает: VBA
Здравствуйте, Ujin Antikvar!

1.
Если под "библиотекой" имеется ввиду модуль *.pas, то делаем так:
Uses
Module1 in '../Folder/Module1.pas' //путь к модулю

Если "библиотека" - это DLL, то так

Procedure Proc1; External '../Folder/Lib.DLL';

2.
Есть встроенные функции перевода чисел из одной системы счисления в другую:
IntToHex, BinToHex и др. (все не помню).

3.
Устанавливаем размер формы (Width) равным 0. Ставим таймер и в обработчике OnTimer увеличиваем ширину формы.

---------
Неправ вечно юзер, ибо прав всегда Админ!
Ответ отправил: VBA (статус: 6-ой класс)
Отправлен: 09.09.2005, 13:45


Вопрос № 26.067
Как можно читать (изменять) данные, передаваемые в/из COM-порта другим процессом ?
Отправлен: 08.09.2005, 21:08
Вопрос задал: Pushkin (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Pushkin!
Это называется "перехватывать".
И зачем нужно изменять? Например, передаете Вы в модем какие-то двоичные данные, ну изменили Вы пару байт. Модем перестал работать. И к чему это, если можно просто по модему молотком постучать? :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 09.09.2005, 06:28

Отвечает: Anefedov
Здравствуйте, Pushkin!
Очень Важный и интересный вопрос. Давайте напряжемся и ответим!!!
Ответ отправил: Anefedov (статус: 5-ый класс)
Отправлен: 12.09.2005, 15:00


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное