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

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


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

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

Выпуск № 601
от 24.09.2006, 09:35

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


Вопрос № 55810: 1) Проблема: есть текстовый файл, допустим E:f1.odr, к нему нужно применить простейший криптоалгоритм (типа inc(i), просто чтобы народ не лазил ;)) и сохранить в E:f2.odr. Мои попытки см. в приложении. Сам вижу что криво, подскажите как лучше оформ...
Вопрос № 55817: Вопрос к тем, кто понимает в ООП.. Написал я свой класс к стандартной кнопке..(листинг ниже..). а оно не не работает.. В чем дело?...
Вопрос № 55824: Здравствуйте, уважаемые эксперты! Я пытаюсь закрыть консольное приложение, запущенное с помощью shellexecute(). Переменная ExeP хранит абсолютный путь до файла этого приложения, который и является заголовком его окна. Подскажите, пожалуйста, поч...
Вопрос № 55857: Здравствуйте, уважаемые эксперты! Проблема: есть компонент - редактор сложных графов, как свойства - две коллекции, Nodes и Links. С первой проблем нет: выводится на канвас, быстро, кликабельно и драгабельно :). Вторая: для создания линка делаю ...
Вопрос № 55904: Здравствуйте, уважаемые эксперты! Нужна ваша помощь. Объясните, пожалуйста, смысл каждой строчки данного кода(в приложении). Если можно, то уточните, пожалуйста, значения аргументов. И подскажите, пожно ли как-нибудь сделать аналогичное, но так, чтоб...

Вопрос № 55.810
1) Проблема: есть текстовый файл, допустим E:f1.odr, к нему нужно применить простейший криптоалгоритм (типа inc(i), просто чтобы народ не лазил ;)) и сохранить в E:f2.odr. Мои попытки см. в приложении. Сам вижу что криво, подскажите как лучше оформить алгоритм.
З.Ы. пробовал задавать массив через 'array of aray of', возвращает глюк в TMasFile[j+1,i+1]:=TFileStr[i] ?
З.Ы.Ы. если грузить через динамический массив, то как определить кол-во строк в файле? Задать цикл на поиск eoln?
2) Сильно надоел стандартный виндовый поисковик Ф3, нужно что-нибуть своё. Подкинте, плз, линк на сорцы. (Хочется посмотреть что люди наваяли, перед тем как самому лезть)

Приложение:

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

Отвечает: sir henry
Здравствуйте, Keraberas!
1) В приложении простой пример для примитивного алгоритма шифрования с помощью XOR. Принцип в следующем: каждый символ в файле с помощью операции XOR шифруется с каким-либо ключом. Чтобы его расшифровать, надо опять побуквенно сделать XOR с тем-же ключом.
Алгоритм очень прост, поэтому работает очень быстро.

Приложение:

Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 18.09.2006, 12:02

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Keraberas!
sir_henry прав - шифрование XOR-ом куда лучше, чем шифрование простым инкрементом. Оно, конечно, считается, самым примитивным, но как раз от совсем "левых" людей, которые не разбираются, защищает. Особенно, если вы будете шифровать не постоянным числом, а скажем, n-ый байт числом 13^n mod 256 (оно же 13^n and 255).
Тем более, что с инкрементом может быть переполнение и какой-дь глюк, т.к. 'я' в win-cp1251 имеет код 255. И встречается эта буква не так уж и редко. В обычных текстах, конечно.

Почему размеры массива именно 256x256 ? Использовать массивы постоянной длинны, кроме как для буфферов - плохо. Но у вас явно делается нечто другое.
Либо я вообще не понял, как работает шифрование.

Правда, при таком шифровании (XOR) слетят нафиг все переносы строк и надо открывать файл и читать побайтово, дешифровывать, а потом либо через буфер, либо еще как-дь (но чтобы не копировать область памяти с расшифрованным текстом) переносить куда надо.

Сделайте чтение одного char-а. и шифруйте.

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 18.09.2006, 12:32


Вопрос № 55.817
Вопрос к тем, кто понимает в ООП.. Написал я свой класс к стандартной кнопке..(листинг ниже..). а оно не не работает.. В чем дело?

Приложение:

Отправлен: 18.09.2006, 11:22
Вопрос задал: Prosto_Blackhowk (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна
Здравствуйте, Prosto_Blackhowk!
Конечно он у вас не будет работать - вы же не создали ни один объект этого класса.

В приложении динамически создается объект вашего класса. Определяется его расположение и определяется событие onclick

Приложение:

---------
Возможно все. И ничего возможно тоже.

Ответ отправила: Татьяна (статус: Практикант)
Ответ отправлен: 18.09.2006, 11:35
Оценка за ответ: 5
Комментарий оценки:
спасибо, этого я как раз и не знал..


Вопрос № 55.824
Здравствуйте, уважаемые эксперты! Я пытаюсь закрыть консольное приложение, запущенное с помощью shellexecute().
Переменная ExeP хранит абсолютный путь до файла этого приложения, который и является заголовком его окна. Подскажите, пожалуйста, почему FindWindow не находит окно этого приложения?
Заранее благодарен!

Приложение:

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

Отвечает: Melamed
Здравствуйте, Андрющенко Вячеслав Васильевич!
Так как консольное приложение не имеет цикла обработки сообщений, то Ваш код не будет в принцыпе работать.
Если Вы имеете идентификатор задачи на этот процесс, то вы можете просто убить (остановить) процесс, используя API функцию TerminateThread.

Приложение:

Ответ отправил: Melamed (статус: 5-ый класс)
Ответ отправлен: 18.09.2006, 12:45

Отвечает: Gh0stik
Здравствуйте, Андрющенко Вячеслав Васильевич!

Советую Вам просто разбивать более сложную задачу на более простые:


procedure TForm1.Button1Click(Sender: TObject);
var t:hwnd;
begin
t:=FindWindow(nil, PChar('c:1Project2.exe')); //находим хендл нужного окна
ShowMessage(inttostr(t)); //проверяем чего мы нашли, если 0 (ноль) то окно не найдено
postmessage(t, WM_CLOSE,0,0); //закрываем окно
end;


Обращаю Ваше внимание что я использую константу WM_CLOSE вместо той которую использовали Вы (WM_QUIT), возможно из-за нее у Вас и не получается закрыть окно... (а у меня окно закрывается).

Удачи!!!

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 18.09.2006, 12:52
Оценка за ответ: 5

Отвечает: n0name
Здравствуйте, Андрющенко Вячеслав Васильевич!
hThread := GetWindowThreadProcessId(findwindow(nil, PChar(ExeP)));
TerminateThread(hThread);
Ответ отправил: n0name (статус: 5-ый класс)
Ответ отправлен: 18.09.2006, 14:02
Оценка за ответ: 5

Отвечает: Chizz
Здравствуйте, Андрющенко Вячеслав Васильевич!

попробуй слэш / - может поможет D:/Pr/test/Project2.exe
а может в findwindow(nil, PChar(ExeP)), wm_quit,0,0) второй параметр не такой.
Ответ отправил: Chizz (статус: 2-ой класс)
Ответ отправлен: 19.09.2006, 14:17
Оценка за ответ: 4


Вопрос № 55.857
Здравствуйте, уважаемые эксперты!
Проблема: есть компонент - редактор сложных графов, как свойства - две коллекции, Nodes и Links. С первой проблем нет: выводится на канвас, быстро, кликабельно и драгабельно :). Вторая: для создания линка делаю так:
with Links.Add do
begin
LBegin := Nodes[i]; // начало линка
LEnd := Nodes[j]; // конец
end;
И получаю объект-линк с адресами конечных нодов. Все проходит.

При попытке переопределить Add следуюшим образом:

function TLinks.Add(LBegin, LEnd: TNode): TLink;
var
NewLink: TLink;
begin
NewLink := TLink(inherited Add);
with NewLink do
begin
FLBegin := LBegin;
FLEnd := LEnd;
end;
Result := NewLink;
end;

вылетает сообщение об ошибке Access violation. В чем фишка?
Отправлен: 18.09.2006, 16:19
Вопрос задал: Joncory (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Joncory!
"Рыба - это к беременности. Хотя, конечно, смотря какая рыба. Может быть, карп, может быть, лещ... но все равно, рыба - это к беременности."
100% не могу гарантировать, но Access violation - это обращение по указателю к невыделенной памяти. Т.е. вы обращаетесь к какой-то переменной не инициализировав ее. В приложении то, как следует исправить, чтобы заработало.
А вообще, на будущее, я бы вам посоветовал ставить breakpoint-ы, трассировать программу и смотреть, где это вылазит.
Выяснили на какой строчке вылетело - смотрите, какие в ней используются переменные и ищете вверх по коду, что не инициализированно или, где за границы массива выходит. Или даже останавливаете программу прям перед этой строчкой и смотрите, значения всех используемых в "проблемной" строке переменных (Ctrl+F5). А потом уже выяснете и разбираетесь в коде - почему не инициализированно.

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 18.09.2006, 16:44


Вопрос № 55.904
Здравствуйте, уважаемые эксперты! Нужна ваша помощь. Объясните, пожалуйста, смысл каждой строчки данного кода(в приложении). Если можно, то уточните, пожалуйста, значения аргументов. И подскажите, пожно ли как-нибудь сделать аналогичное, но так, чтобы форма запускаемого приложения не показывалась? Заранее очень благодарен!

Приложение:

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

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Андрющенко Вячеслав Васильевич!
Я в приложении написал буквально по каждой строчке. А вообще-то в MSDN все написано. Учитесь искать информацию сами.

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 19.09.2006, 02:40
Оценка за ответ: 5

Отвечает: Arvist
Здравствуйте, Андрющенко Вячеслав Васильевич!

Createprocess - порождает процесс, в данном случае запускает программу звукозаписи
Waitforsingleobject - приостанов выполнения программы до завершения дочернего процесса или заданного интервала времени, в данном случае infinite - бесконечно.
Чтобы форма не показывалась и можно сделать напрмиер консольное приложение и не исользовать Waitforsingleobject, если программа кроме запуска другой программы звукозаписи ничего не делает. чтобы не видно было самой рограммы звукозаписи можно:
1/ Поставить параметр wShowWindow := 0 (не пробовал)
2/ Послать окну SoundRec сообщение WM_HIDE следующим образом: SendMessage(FindWindow('SoundRec','Звук - Звукозапись',WM_HIDE,0,0));

Приложение:

---------
В будущем определено одно - неопределенность будущего!

Ответ отправил: Arvist (статус: 2-ой класс)
Ответ отправлен: 19.09.2006, 10:59
Оценка за ответ: 5


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное