Вопрос № 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 массива) ?
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;
Отвечает: 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);
Удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Поскольку 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?
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере 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();
Как принимать результат выполнения(в виде текста)?
Отвечает: Ерёмин Андрей
Здравствуйте, Lobach Sergei!
Метод Get как раз и возвращает результат работы в виде строки. Поэтому код будет примерно таким: var res: string;
...
res:=idHTTP.Get('url'); --------- Нет правила без исключений. Правило без исключений - исключение из правил.