Вопрос № 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). Как перевести?
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, 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. Подскажите, пожалуйста, как это сделать? Заранее благодарен!
Т.е., я так понял, что Вам нужно перед началом обмена вызвать
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
Подскажите где можно скачать диск к книге Флеонова Делфи глазами хакера