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

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


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

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

Выпуск № 804
от 09.05.2007, 04:35

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


Вопрос № 85190: Здравствуйте уважаемые!Подскажите пожалуйста функции которые смогли бы перевести M:array[1..n]of char; в str:string; и обратно.И ещё в своём приложении мне надо считать из бинарного файла один из элементов его структуры tipfile:array [1..4] of byte; ...
Вопрос № 85203: Уважаемые эксперты, помогите. Разрабатываю простой эммулятор работы микросхемы "И", по нажатию кнопок ОДИН и НОЛЬ на форме рисуется временная диаграмма. Вопрос 1: как сделать так, чтобы эти кнопки были не видимые и срабатывали по нажат...
Вопрос № 85237: Уважаемые эксперты, подскажите как перехватить событие: а)допустим мое приложение работает б)убиваем процесс именно через Диспетчер задач виндовс (а не просто через OnClose) Вопрос: какое сообщение посылает виндовс моему приложению чтобы ...
Вопрос № 85275: Как с помощью функции winexec можно запускать интернет ссылку в браузере, который стоит поумолчанию....
Вопрос № 85290: Уважаемые эксперты. Как можно создать дерево классов средствами Delphi 7.0? ...
Вопрос № 85292: Здрасте!!! Для того, чтобы перехватить сообщения прокрутки ListBox'а (если я правильно понимаю) нужно создать класс от TListBox с процедуркой перехватывающей WM_VSCROLL и WM_HSCROLL. Так вот это я сделал, сообщения перехватываются. А как заставить Li...
Вопрос № 85309: Здравствуйте, мне необходимо передавать данные скрипту на удаленном сервере, и получить результат выполнения скрипта в виде html кода. Передаю данные с помощью idhttp.get(); Как принимать результат выполнения(в виде текста)?...

Вопрос № 85.190
Здравствуйте уважаемые!Подскажите пожалуйста функции которые смогли бы перевести M:array[1..n]of char; в str:string; и обратно.И ещё в своём приложении мне надо считать из бинарного файла один из элементов его структуры tipfile:array [1..4] of byte; в строку.Я это делаю read'ом в M:array[1..4]of char; а могу ли я это делать в str:string[4].
Отправлен: 03.05.2007, 06:45
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, GAZOT!
Ну вроде ничего сложного нет... Сначала объявляем тип данных "массив символов":

type
TCharArr = Array Of Char;


И дальше функции... Перевод в строку:

function CharArrToString(Arr: TCharArr): String;
var i: integer;
begin
Result:='';
for i:=0 to Length(Arr)-1 do
Result:=Result+Arr[i];
end;


И обратно:

function StringToCharArr(Str: String): TCharArr;
var i: integer;
begin
SetLength(Result,Length(Str));
for i:=1 to Length(Str) do
Result[i-1]:=Str[i];
end;


Обратите внимание, что если не описывать указанный тип данных, то с реализацией таких функций возникнут проблемы.
Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286837644
----
Ответ отправлен: 03.05.2007, 08:35
Оценка за ответ: 4
Комментарий оценки:
я вижу что ничего сложного нет просто думал есть стандартные ф-ции типа inttostr или strtoint,а на второй вопрос я так и не получил ответ

Отвечает: Zubex
Здравствуйте, GAZOT!
Смотрите в приложении...
Удачи!

Приложение:

---------
Если не знаешь что сказать - лучше промолчи...

Ответ отправил: Zubex (статус: 7-ой класс)
Ответ отправлен: 03.05.2007, 10:54
Оценка за ответ: 4

Отвечает: Denisss

Здравствуйте, GAZOT!

Для копирования из массива в строку можно использовать процедуру Move (пример с подробнейшими комментариями см. в приложении).

Если Вы можете считать в массив символов, то можете и в строку str.
В Delphi (за исключением .Net версий) строки - это и есть массивы.

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 03.05.2007, 11:20
Оценка за ответ: 5
Комментарий оценки:
спасибо за очень подробный ответ


Вопрос № 85.203
Уважаемые эксперты, помогите. Разрабатываю простой эммулятор работы микросхемы "И", по нажатию кнопок ОДИН и НОЛЬ на форме рисуется временная диаграмма.
Вопрос 1: как сделать так, чтобы эти кнопки были не видимые и срабатывали по нажатию 1 или 0 на клавиатуре?
Вопрос 2: как создать массив, состоящий из 0 и 1 при по нажатию данных клавиш (2 массива) ?

Приложение:

Отправлен: 03.05.2007, 09:19
Вопрос задал: Садовский А.А. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss
Здравствуйте, Садовский А.А.!

1. Кнопки делать невидимыми не надо. Если они не нужны, то их и не нужно создавать.
Чтобы сделать у формы обработчик нажатия клавишь, нужно:
1.1. Установить свойство формы KeyPreview = True
1.2. Создать обработчик (двойным кликом мыши) события (на закладке Events свойств формы) OnKeyPress, в нем прописать:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var
k: Integer;
s: String;
begin

case
Key of
'1':
begin
Сюда пишете обработчик нажатия на кнопку 1
end;
'0':
begin
Сюда пишете обработчик нажатия на кнопку 0
end;
end;

end;


2. Второй Ваш вопрос мне не совсем понятен.
Массивы задаются с помощью команды array. Пример:

Massiv: array[0..100] of Byte;

Также массивы можно реализовывать с помощью класса TList.

PS
Проверку:

if checkbox2.Checked=true then begin

Нужно делать короче:

if checkbox2.Checked then begin

В Вашем случае Delphi делает следующее:
1. Проверяет содержимое checkbox2.Checked
2. Сравнивает его с True (результат в виде boolean)
3. Сравнивает результат сравнения с True

Во втором случае Delphi будет делать:
1. Проверяет содержимое checkbox2.Checked
2. Сравнивает его с True

Как видите, второй вариант применять оптимальнее
Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 03.05.2007, 11:55


Вопрос № 85.237
Уважаемые эксперты, подскажите как перехватить событие:
а)допустим мое приложение работает
б)убиваем процесс именно через Диспетчер задач виндовс (а не просто через OnClose)
Вопрос: какое сообщение посылает виндовс моему приложению чтобы оно закрылось - я думал что
это Windows.PROCESS_TERMINATE (см. ниже) или как вообще перехватить закрытие?

Я делаю так, только это не работает:

..
ApplicationEvents1: TApplicationEvents;
..

procedure TFCli.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
Handled:=false;
if (Msg.message=WM_CLOSE) or (Msg.message=WM_DESTROY)
or (Msg.message=WM_Quit) or (Msg.message=Windows.PROCESS_TERMINATE)
or (Msg.message=Windows.SC_CLOSE)
then begin ... end;
end;

Заранее благодарен.
Отправлен: 03.05.2007, 12:15
Вопрос задал: Ренат Байрамгулов (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: chikanok
Здравствуйте, Ренат Байрамгулов!
Windows не посылает не каких сообщений, когда вырубают через Диспетчер.
Диспетчер вызывает функцию ZwTerminateProcess из NativeAPI.
Можно перехватить вызов данной функции и самому послать сообщение, после чего сделать задержку для того что бы приложение успело его обработать, а после убить.
А ещё лучше после перехвата проверить имя процесса если ваш то не убивать его, а просто послать сообщение.
Для перехвата легче всего написать небольшую библиотеку(код в приложении).
Но у меня не получается получить имя завершаемого процесса('GetProcessImageFileNameA').

Приложение:

---------
Главное желание,а там разберёмся!

Ответ отправил: chikanok (статус: 3-ий класс)
Ответ отправлен: 04.05.2007, 12:08
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!


Вопрос № 85.275
Как с помощью функции winexec можно запускать интернет ссылку в браузере, который стоит поумолчанию.
Отправлен: 03.05.2007, 16:13
Вопрос задал: Soadbest (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, Soadbest!
С помощью WinExec не получится (ну хотя есть способ), но проще через Shell. Добавьте в uses модуль ShellAPI, а дальше так:
ShellExecute(0,'open','http://www....','','',SW_SHOWNORMAL);
Удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286837644
----
Ответ отправлен: 03.05.2007, 18:04

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

Поскольку WinExec - считается морально устарелой, то советую Вам воспользоваться ShellExecute
Например так:
ShellExecute(Handle, nil, 'http://www.mail.ru', nil, nil, SW_SHOW);
Только при использовании ShellExecute - не забудьте прописать в uses ShellApi;

Ну, а если Вам все-таки хочется использовать WinExec - то Вам предварительно прийдется узнать какой браузер в системе стоит по умолчанию... - поскольку первый параметр у даной функции есть команда.

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 03.05.2007, 18:10


Вопрос № 85.290
Уважаемые эксперты. Как можно создать дерево классов средствами Delphi 7.0?
Отправлен: 03.05.2007, 17:32
Вопрос задал: Култышев Владимир (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, Култышев Владимир!

Вот пример который я нашел в сети:
# Иерархия классов

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

И в довесок к этому также даю ссылки еще на пару примеров, возможно они Вам пригодятся:
# Все 270 классов Delphi
# Вывести информацию о классах

Good Luck!!!

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

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


Вопрос № 85.292
Здрасте!!! Для того, чтобы перехватить сообщения прокрутки ListBox'а (если я правильно понимаю) нужно создать класс от TListBox с процедуркой перехватывающей WM_VSCROLL и WM_HSCROLL. Так вот это я сделал, сообщения перехватываются. А как заставить ListBox прокрутиться? Может есть другие способы перехвата прокрутки, запоминать на скока прокрутился при обновлении списка прокрутить на запомненную величину?
Отправлен: 03.05.2007, 18:22
Вопрос задал: Beginner (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

1. Попробуйте так SendMessage(ListBox.Handle, LB_SETTOPINDEX, Index, 0), где Index это индекс того элемента, который должен быть самой верхней строкой (если количество элементов достаточное, иначе будут показаны последние элементы, попадающие в видимую область).

Перед этим, используя результат функции SendMessage(ListBox.Handle, LB_GETTOPINDEX, 0, 0) можно узнать текущий "верхний" элемент - и прибавить к нему запомненное вами смещение для прокрутки.

2. Возможно, гораздо проще при перехвате отправлять сообщение дальше (вызывать родительский обработчик) и тогда не понадобится других действий.
Ответ отправил: PGM (статус: 6-ой класс)
Ответ отправлен: 04.05.2007, 10:43


Вопрос № 85.309
Здравствуйте, мне необходимо передавать данные скрипту на удаленном сервере, и получить результат выполнения скрипта в виде html кода. Передаю данные с помощью idhttp.get();
Как принимать результат выполнения(в виде текста)?
Отправлен: 03.05.2007, 19:55
Вопрос задал: Lobach Sergei (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, Lobach Sergei!
Метод Get как раз и возвращает результат работы в виде строки. Поэтому код будет примерно таким:
var res: string;
...
res:=idHTTP.Get('url');

---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286837644
----
Ответ отправлен: 03.05.2007, 21:22


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

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

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

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

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

В избранное