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

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


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

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

Выпуск № 658
от 22.11.2006, 19:05

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


Вопрос № 62911: Уважаемые эксперты!!! Итак: Требуется сохранить изображение попиксельно в файл, делаю так: var f:file; h:longint; b:word; a:array of longint; i,j:integer; begin Setlength(a,iwidth*iheight); for j:=0 t...
Вопрос № 62926: Здравствуйте уважаемые эксперты! Я недавно наткнулся на статью о программах, использующих API-функции и решил написать программу-шутку (там были варианты нескольких программ-шуток). Она представлена в приложении. Эта программа выводит веселое соо...
Вопрос № 63000: Здравствуйте, уважаемые эксперты! В приложении пример из delphiworld, который ставит флаги DTR и RTS в активное состояние для выбранного порта. Мне нужно "выключить" DTR и RTS. Подскажите, пожалуйста, как это сделать? Заранее благодарен!...
Вопрос № 63017: Здравствуйте! Использую Delphi 2005. 1. Использую компонент ListBox для отображения списка файлов. К примеру есть такой список: 1.txt 2.txt 3.txt Как получить значение элемента по которому кликнули? Если использовать например ...
Вопрос № 63018: Подскажите где можно скачать диск к книге Флеонова Делфи глазами хакера...

Вопрос № 62.911
Уважаемые эксперты!!!

Итак:
Требуется сохранить изображение попиксельно в файл, делаю так:

var f:file;
h:longint;
b:word;
a:array of longint;
i,j:integer;
begin
Setlength(a,iwidth*iheight);
for j:=0 to iheight do
for i:=0 to iwidth do
begin
h:=image1.Canvas.Pixels[i,j];
b:=i+j*iWidth;
a[b]:=h;
end;
assignfile(f,filename);
rewrite(f,4);
blockwrite(f,iheight,1);
blockwrite(f,iwidth,1);
for i:=0 to iwidth*iheight do
blockwrite(f,a[i],1);
closefile(f);
Изображение сохраняется,все прекрастно работает.

НО мне нужно сохранить изображение в 24 битной палитре в пиксельном режиме 888 (R8 G8 B8)!
Т.е в моей программе красный 255, а должен ff0000 (16711680). Как перевести?
Отправлен: 16.11.2006, 19:25
Вопрос задал: Golden Spider (статус: 5-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Golden Spider!
В любом случае придется разбивать TColor на отдельные байты.
Предлагаю сохранять и загружать побайтово и использовать для этого не BitMap.Canvas.Pixels[x,y], а BitMap.ScanLine[y]. Кстати, работающее гораздо быстрее. Это указатель на последовательность байт ([RGB][RGB]...[RGB]), соответсвтующая строке пикселей с номером y. Можно сохранять в переменную типа pByteArray. Если так надо сохранять в longint (хотя это X8 R8 G8 B8, а не R8 G8 B8), сохраняйте так:
p := BitMap.ScanLine[y];
h := p^[x*3];
h := h shl 8 + p^[x*3+1];
h := h shl 8 + p^[x*3+2];

// h - та же переменная, что у вас. Далее ее также и заисываете
Кстати, промежуточный массив не особо нужен - можно сразу писать в файл.
А если не надо, то пишите блоками (вариант, про который я вначале говорил):
for y := 0 to BitMap.Height-1 do
blockwrite(f, BitMap.ScanLine[y], 3*iwidth);

---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 16.11.2006, 21:33
Оценка за ответ: 5
Комментарий оценки:
Thanks!!!


Вопрос № 62.926
Здравствуйте уважаемые эксперты! Я недавно наткнулся на статью о программах, использующих API-функции и решил написать программу-шутку (там были варианты нескольких программ-шуток). Она представлена в приложении. Эта программа
выводит веселое сообщение об ошибки и блокирует затем открытие меню ПУСК с помощью мыши. Программа работает. Программа после закрытия окна сообщения закрывается, но кнопка ПУСК с помощью мыши не доступна. У меня возникла идея модифицировать ее, но не знаю как (опыт у меня небольшой, в основном по работе с элементами форм). А вопрос заключается в следующем:
1) Где в программе мне нужно внести изменения и какие, чтобы:
а) данная программа скопировала бы свой исполнимый файл на жесткий диск в
конкретный каталог (для примера C:\WINDOWS\USER_1) переименовав свой файл;
б) прописать ярлык в меню ПУСК->ПРОГРАММЫ->АВТОЗАГРУЗКА на скопированный
файл, предварительно проверив не существует ли он...
в) при открытии меню (в пункте (б) можно было удалить ярлык на
пользовательском уровне, т.е. через вызов контекстного меню данного
ярлыка и выбора команды УДАЛИТЬ в Win98 и выше),
и после удаления ярлыка из АВТОЗАГРУЗКИ и дальнейшей перезагрузки
связь с этой программой не восстановилась.
г) самое главное, чтобы эти дополнения не несли вредоносный код...
2) Программа с требуемыми изменениями не относится ли к разряду вирусов?

И пожалуйста опишите подробнее добавляемые команды.

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

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

Приложение:

Отправлен: 16.11.2006, 21:03
Вопрос задал: Минаев Юра (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PaVeL_Ekt
Здравствуйте, Минаев Юра!

данная программа тоже может считаться вредоносной программой, а создание вредоносной программы влечет уголовную ответственность!!!
так-что подумай, прежде чем писать!!!

а в качестве развития (не для написания вредоносных программных продуктов)
вот несколько функций !!!

Приложение:

---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL

Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 17.11.2006, 13:54
Оценка за ответ: 5
Комментарий оценки:
Спасибо, я учту. На самом деле я хотел разыграть друзей и одновременно преподать урок, чтобы были более бдительны:
1) Не отключали антивирусную защиту для ускорения работы Windows
2) Не запускали неизвестные приложения, не выяснив их назначение (чрезмерное любопытство приводит к серьезным последствиям)
И при этом, чтобы не запортить систему.

Отвечает: Sattar
Здравствуйте, Минаев Юра!
За використання даного коду відповідпьності НЕ НЕСУ!!!!
Використовуй на свій страх і ризик!

Приложение:

Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 19.11.2006, 11:51


Вопрос № 63.000
Здравствуйте, уважаемые эксперты! В приложении пример из delphiworld, который ставит флаги DTR и RTS в активное состояние для выбранного порта. Мне нужно "выключить" DTR и RTS. Подскажите, пожалуйста, как это сделать? Заранее благодарен!

Приложение:

Отправлен: 17.11.2006, 12:06
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Маренич Владимир
Здравствуйте, Андрющенко Вячеслав Васильевич!
В Вашем приложении уже есть управление RTS. DTR точно также управляется

EscapeCommFunction( fHandle, SETDTR); //Установка DTR

EscapeCommFunction( fHandle, CLRDTR); //Сброс DTR

Т.е., я так понял, что Вам нужно перед началом обмена вызвать
EscapeCommFunction( fHandle, CLRRTS);
EscapeCommFunction( fHandle, CLRDTR);
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 17.11.2006, 12:37
Оценка за ответ: 3


Вопрос № 63.017
Здравствуйте!
Использую Delphi 2005.
1. Использую компонент ListBox для отображения списка файлов. К примеру есть такой список:
1.txt
2.txt
3.txt
Как получить значение элемента по которому кликнули? Если использовать например GetText то возвращается строка со всеми элементами.
Мне нужно открыть соответствующий файл. А можно ли привязать к элементу ...что-то вроде действия. Чтобы в этом конкретно списке были не имена файлов, а заголовки (их содержит первая строка файла), но при нажатии открывался привязанный файл?
Отправлен: 17.11.2006, 14:39
Вопрос задал: Yadovit (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PaVeL_Ekt
Здравствуйте, Yadovit!

Получить значение ListBox-а можно

Procedure listbox1OnClick(sender:TObject);
var s:string; f:file; buf:array [1.1024] of byte;
begin
s:=listbox1.items.strings[listbox1.itemindex];
// а дальше работа с файлами !!!
assignfile(f, s);
reset(f, 1);
blockread(f, buf, sizeof(buf));
// и т.д.
closefile(f);
end;
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 17.11.2006, 14:59

Отвечает: KiberZero
Здравствуйте, Yadovit!
Можно ещё и так попробовать.
Если здесь Reset(f,'1.txt'); выполнить прописку полного пути открытия файла, то можно использовать заголовки файлов...

Приложение:

Ответ отправил: KiberZero (статус: 1-ый класс)
Ответ отправлен: 18.11.2006, 23:16

Отвечает: Sattar
Здравствуйте, Yadovit!
1.procedure TForm1.ListBox1Click(Sender: TObject);
begin
ShowMessage(ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

Приложение:

Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 19.11.2006, 18:08


Вопрос № 63.018
Подскажите где можно скачать диск к книге Флеонова Делфи глазами хакера
Отправлен: 17.11.2006, 15:11
Вопрос задал: Negruzzi Cristian (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: KiberZero
Здравствуйте, Negruzzi Cristian!
Если не ошибаюсь, то здесь - http://xammep.nm.ru/library.html.
Ответ отправил: KiberZero (статус: 1-ый класс)
Ответ отправлен: 17.11.2006, 20:11


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное