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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 357
от 17.01.2006, 00:48

Администратор:Калашников О.А.
В рассылке:Подписчиков: 233, Экспертов: 55
В номере:Вопросов: 11, Ответов: 42


Вопрос № 33008: Здравствуйте, уважаемые эксперты! Вопрос: как сделать, чтобы приложение перехватывало коды нажатых клавиш когда оно неактивно и находиться в фоне?...
Вопрос № 33014: Ув. Эксперты меня интересует такой вопрос, есть ли в Делфях команды которые позвалают выключать/закрывать текущее приложение (программу). И команды для выключения компьютера....
Вопрос № 33034: Как создавать web-приложения? Нужно создать программу,которая в html формате запрашивала логин и пароль. И еще,как засунуть программу на мой сайт?...
Вопрос № 33046: Здравствуйте, господа Эксперты ! Помогите с наследованием? Есть TGauge , но у него MaxValue Integer, мне надо Longword. :( Как это сделать? P.S. Прошу сторонние компоненты не предлагать. Delphi5....
Вопрос № 33049: Добрый день.Всех с прошедшими праздниками! Подскажите,пожалуйста,как внутри строки убрать пробел? Нашел только одну функцию-Trim,но она убирает пробел только по бокам (. Спасибо....
Вопрос № 33057: Спасибо sir henry за ответ на прошлый вопрос :) ну не приходят мне ответы на почту :( ... Уважаемые Эксперты есть еще один очень наболевший вопрос помогите? Дано: Panel1 На панели Label1 в Label1 необходимо помести...
Вопрос № 33061: Здравствуйте,уважаемые эксперты!!! MediaPlayer: Есть в листбоксе пути до песен: как сделать чтобы когда закончится песня начиналь бы следующая?...
Вопрос № 33063: Здравствуйте,уважаемые эксперты. Как узнать сколько строк заполнено в ListBox?...
Вопрос № 33064: Здраствуйте, Помогите пожалуйста срочно нужно написать калькулятор, который могбы слажывать любые цыфру, например: 123456789123456789123446+число с 50 цыфр. Дайте кусочки исходника... Заранее спасибо....
Вопрос № 33072: Здравствуйте уважаемые эксперты, помогите пожалуйста!!! В Delphi 7 нет TClientSocket, а мне очень нужна его функция SendText. Подскажите, может в Delphi 7 есть замена TClientSocket или подскажите где скачать аналогичный компонент. Заранее СПАСИБО!!!...
Вопрос № 33076: Кто знает как в консольном приложении использовать таймер, например, сделать чтобы через каждые 5 секунд выводился текст?...

Вопрос № 33.008
Здравствуйте, уважаемые эксперты!
Вопрос: как сделать, чтобы приложение перехватывало коды нажатых клавиш когда оно неактивно и находиться в фоне?
Отправлен: 11.01.2006, 00:53
Вопрос задал: Евгений Алексеевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Bob Johnson
Здравствуйте, Евгений Алексеевич!
Использовать хуки (см. SetWindowsHookEx). Если ты работаешь под Windows NT (2K, XP, 2003) - то лучший вариант, это WH_KEYBOARD_LL, потому что тебе даже не надо будет думать о потоках и размещать хук в отдельной библиотеке.
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 11.01.2006, 01:26
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!

Отвечает: Diman_A
Здравствуйте, Евгений Алексеевич!
См. http://delphiworld.narod.ru/base/hook_keys.html
Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 11.01.2006, 06:36
Оценка за ответ: 5
Комментарий оценки:
Очень полезная статья! Спасибо!

Отвечает: One
Здравствуйте, Евгений Алексеевич!
См. приложение, смысл в том, что пишется dll, в которой вешается ловушка.

Приложение:

---------
Компьютер должен работать, а человек - DOOMать.

Ответ отправил: One (статус: 1-ый класс)
Отправлен: 11.01.2006, 18:20
Оценка за ответ: 5
Комментарий оценки:
Отлично для начинающего эксперта! Спасибо!

Отвечает: Ataman N. N.
Здравствуйте, Евгений Алексеевич!
Для этого используется технология хуков. Про хуки есть довольно много статей в Интернете, можете посмотреть на сайте Мастеров Дельфи (delphimastak.ru)
Ответ отправил: Ataman N. N. (статус: 5-ый класс)
Отправлен: 13.01.2006, 20:46
Оценка за ответ: 5
Комментарий оценки:
Thanks!


Вопрос № 33.014
Ув. Эксперты меня интересует такой вопрос, есть ли в Делфях команды которые позвалают выключать/закрывать текущее приложение (программу). И команды для выключения компьютера.
Отправлен: 11.01.2006, 04:29
Вопрос задала: Шишлянникова Анисия Николаевна (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Пёс
Здравствуйте, Шишлянникова Анисия Николаевна!

Конечно есть: Sendmessage(findwindow('Приложение'),wm_close,0,0);
{wm_close или wm_destroy
если вы не хотите чтоб ваша программа продолжала работу пока не получит ответ, то пишите Postmessage}

MyExitWindows(EWX_REBOOT or EWX_FORCE); - Перезагрузка компа.
MyExitWindows(EWX_POWEROFF or EWX_FORCE); - Выключение компа

Приложение:

---------
Пока бежал, онумудрился прописать дырочку в снегу...

Ответ отправил: Пёс (статус: 1-ый класс)
Отправлен: 11.01.2006, 05:06

Отвечает: sir henry
Здравствуйте, Шишлянникова Анисия Николаевна!
1. Есть. Но способ закрытия зависит от приложения. Если есть главное окно, то достаточно закрыить его и приложение будет закрыто.
2. Какая ОС? Команды нету, но можно написать процедуру. Для вин2000 или ХР, пример выключения см в приложении.

Приложение:

Ответ отправил: sir henry (статус: Академик)
Отправлен: 11.01.2006, 08:43

Отвечает: Ерёмин Андрей
Здравствуйте, Шишлянникова Анисия Николаевна!
Завершить программу можно разными способами, например просто закрыв главную форму: frmMain.Close; Или же просто прервать работу программы: Application.Terminate;
А для выключения - вот две функции:

function PowerOffOS: Boolean;
begin
{$IFDEF MSWINDOWS}
Result := ExitWindows(EWX_POWEROFF);
{$ENDIF}
end;

function ShutDownOS: Boolean;
begin
{$IFDEF MSWINDOWS}
Result := ExitWindows(EWX_SHUTDOWN);
{$ENDIF}
end;


Первая полностью выключает компьютер, а вторая просто завершает работу системы, оставляя питание включенным (появится надпись "теперь питание компьютера можно отключить").
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 11.01.2006, 09:20

Отвечает: Lexus
Здравствуйте, Шишлянникова Анисия Николаевна!

Пожалуйста!Вот ответ.

Чтобы закрыть ваше приложение:
1.Вызвать application.terminate;
2.Закрыть главное окно приложения, например, если Form1 - главное окно, то вызываем
form1.close;

Чтобы выключить комп:
ExitWindowsEx(EWX_PowerOff,0);

Для справки, вместо EWX_PowerOFF (или вместе с ним через знак "+") можно употреблять:
1.EWX_Force - жесткое закрытие всех запущенных приложений (не спрашивает так "хотите сохранить изменения или нет")
2.EWX_Reboot - правильная (с точки зрения Windows) перезагрузка компа
3.EWX_LogOff - завершение текущего сеанса (открывает окно выбора пользователя)
4.EWX_Shutdown - дословно "сбросить, остановить систему" - Переводит систему в то состояние, которое наступает при выключении (завершаются приложения, очишаются буферы и т.д.), но не выключает комп.
Ответ отправил: Lexus (статус: 1-ый класс)
Отправлен: 11.01.2006, 10:11

Отвечает: One
Здравствуйте, Шишлянникова Анисия Николаевна!
Завершить приложние:
application.Terminate;//можно так
//или закрыть главную форму:
close;//это пишешь в модуле главной формы, она закроется вместе со всей прогой

Выключить комп:
Win32Check(ExitWindowsEx(EWX_SHUTDOWN,0));//Выход и выключение питания
В среде Windows NT ф-ция ExitWindowsEx может затребовать спец. привелегии, получить их мона с помощью Win32 API функции AdjustTokenPrivileges(), чтобы получить привелегию SE_SHUTDOWN_NAME. См. приложение.

Приложение:

---------
Компьютер должен работать, а человек - DOOMать.

Ответ отправил: One (статус: 1-ый класс)
Отправлен: 11.01.2006, 18:19

Отвечает: Ataman N. N.
Здравствуйте, Шишлянникова Анисия Николаевна!
В самих Делфях команды выключения компьютера нет, для этого обычно пользуются API-функциями.
Что же касается закрытия текущего приложения - Application.Terminate - завершает работу приложения. Если Вы хотите закрыть какое-либо другое приложения, то Вам придеться послать этому приложению сообщение WM_CLOSE, но для начала нужно сначала определить дескприптор приложения.
Ответ отправил: Ataman N. N. (статус: 5-ый класс)
Отправлен: 13.01.2006, 20:36


Вопрос № 33.034
Как создавать web-приложения?
Нужно создать программу,которая в html формате запрашивала логин и пароль.
И еще,как засунуть программу на мой сайт?
Отправлен: 11.01.2006, 11:57
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Sassoft!
1. http://www.delphimaster.ru/cgi-bin/articles.pl?razdel=3
3. У Вашего сайта должен быть каталог скриптов, например cgi-bin, вот туда и засовывайте. Как, зависит от того, как Вы администрируете свой сайт. К Дельфи это отношение не имеет.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 11.01.2006, 12:34

Отвечает: romodos
Здравствуйте, Sassoft!
Если вы имеете в виду CGI, то их можно создавать на любом языке программирования, но ваш сервер должен поддерживать эту технологию. Ссылка sir henry очень хорошая.
Для этого нужно использовать языки PHP или Perl, обращайтесь в соответсвующую рассылку. Если ваш хостинг поддерживает эти языки, то пожалуйста.

---------
FAQ me off!
Ответ отправил: romodos (статус: Практикант)
Отправлен: 11.01.2006, 12:51

Отвечает: Ерёмин Андрей
Здравствуйте, Sassoft!
Наверное, проще написать всё это с помощью языков веб-программирования. Лично я предпочитаю PHP. Ещё можно на Perl или на CGI. Самый универсальный - CGI. Работать с ним можно и в Delphi. Логины и пароли удобно хранить в MySQL-базе (в пакете Denwer есть MySQL-Max и phpMyAdmin). Как заметил sir henry, PHP-скрипты можно помещать в любые каталоги, а perl и cgi - в каталог /cgi-bin/. При этом ваш хостер должен разрешать использовать скрипты на сервере, чего, увы, многие бесплатные не разрешают.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 11.01.2006, 13:33
Оценка за ответ: 5
Комментарий оценки:
Нет,как писать web-приложения в Delphi?

Отвечает: Slava
Здравствуйте, Sassoft!
Web-приложения создаются следующим образом: в меню File - New - other и выбираем во вкладке New -> Web Server Application и выбрать соответствующий тип web-модуля. (например CGI Stand-alone executable - создание серверного консольного приложения. Приложение получает параметры и передает результаты работы напрямую.) Приложение должно находится в каталоге cgi-bin сервера. Далее создается html- страничка на ней форма с полями запроса логина и пароля и кнопка "отправить". что-то типа
<form action='http://server/cgi-bin/appname.exe' method='GET'> При отправке формы приложение получит инф-ю от формы в виде параметров.
Ответ отправил: Slava (статус: 5-ый класс)
Отправлен: 11.01.2006, 21:11


Вопрос № 33.046
Здравствуйте, господа Эксперты !

Помогите с наследованием?

Есть TGauge , но у него MaxValue Integer, мне надо Longword. :(
Как это сделать?

P.S. Прошу сторонние компоненты не предлагать.

Delphi5.
Отправлен: 11.01.2006, 13:51
Вопрос задал: LanK (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, LanK!
Можно и без наследования обойтись. Найдите файл gauges.pas и сделайте его резервную копию куда-нибудь на всякий случай. Найдите в файле в классе TGauge (в секции private) элементы FMaxValue и FCurValue и исправте у них тип LongInt на LongWord. В процедурах SetMaxValue и SetProgress, у параметров Value, тоже исправте тип на LongWord.
В секции public найдите свойство Progress и свойство MaxValue и тоже исправте тип на LongWord.
В секции Implementation у вышеназваных процедур тоже не забудте поправить типы параметров.
Потом перекомпилируете gauge.pas, помещаете готовый модуль .dcu в каталог LIB и можете пользоваться.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 11.01.2006, 14:28

Отвечает: One
Здравствуйте, LanK!
procedure TForm1.Button1Click(Sender: TObject);
var
lw: LongWord;
begin
lw := LongWord(form1.Gauge1.MaxValue);
//На D5 это тоже будет работать
form1.Label1.Caption := IntToStr(lw)
end;
---------
Компьютер должен работать, а человек - DOOMать.
Ответ отправил: One (статус: 1-ый класс)
Отправлен: 11.01.2006, 18:17


Вопрос № 33.049
Добрый день.Всех с прошедшими праздниками!
Подскажите,пожалуйста,как внутри строки убрать пробел?
Нашел только одну функцию-Trim,но она убирает пробел только по бокам (.
Спасибо.
Отправлен: 11.01.2006, 14:19
Вопрос задал: Сусликов Евгений Павлович (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Сусликов Евгений Павлович!
Подключите в uses модуль StrUtils. В нём есть функция AnsiReplaceStr(), которая заменяет в указанной строке одну подстроку на другую. Вот пример:

StrWithoutSpaces:=AnsiReplaceStr(StrWithSpaces,' ','');


---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 11.01.2006, 14:28
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Сусликов Евгений Павлович!
Вы маленько не то смотрели. :)
Сначала с помощью функции Pos() найдите какое место пробел занимает в Вашей строке. Затем с помощью процедуры Delete() удаляете его из строки.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 11.01.2006, 14:33
Оценка за ответ: 4

Отвечает: Schmak
Здравствуйте, Сусликов Евгений Павлович!
Зачем что-то ичкать когда решение всего в 2 строки. Вот так:
var s:string;
begin
s:='Stroka s p r o b e l a m i';
while pos(' ',s)<>0 do
delete(s,pos(' ',s),1);
writeln(s);
readln;
end.
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 11.01.2006, 16:13
Оценка за ответ: 5

Отвечает: Diman_A
Здравствуйте, Сусликов Евгений Павлович!
Функция удаляет пробелы и по бокам, и внутри строки. Button1Click - пример использования.

Приложение:

Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 11.01.2006, 17:27
Оценка за ответ: 5

Отвечает: Николай Б.
Здравствуйте, Сусликов Евгений Павлович!
//str - строка
while pos(' ',str)>0 do
delete(str,pos(' ',str),1);
---------
LINUX - New Lifi IN Users
Ответ отправил: Николай Б. (статус: 1-ый класс)
Отправлен: 12.01.2006, 19:49
Оценка за ответ: 5

Отвечает: Ataman N. N.
Здравствуйте, Сусликов Евгений Павлович!
Придется Вам проходить строку поэлементно
Ответ отправил: Ataman N. N. (статус: 5-ый класс)
Отправлен: 13.01.2006, 20:29


Вопрос № 33.057
Спасибо sir henry за ответ на прошлый вопрос :) ну не приходят мне ответы на почту :( ...

Уважаемые Эксперты есть еще один очень наболевший вопрос помогите?

Дано:
Panel1
На панели Label1

в Label1 необходимо поместить текст разной длины, количесва строк.
Фонт Label может меняться - и размер и стиль и сам фонт.

Надо:
Установить в ручную размер панели чтобы был виден весь текст.
P.S.
Увы, AutoSize я ей поставить не могу. Надо как то вычислять самому...
Количество строк вычислил - создав "скрытый" RichEdit и считывая у него сколько строк :) ...
А вот со шрифтами... :(
А еще у пользователей может схема БОЛЬШОЙ шрифт? :((((
Отправлен: 11.01.2006, 17:05
Вопрос задал: LanK (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Minor
Здравствуйте, LanK!
Советую пользоваться функциями
Label1.Canvas.TextHeight(Label1.Caption)
и
Label1.Canvas.TextWidth(Label1.Caption)
удачи ;)
---------
Не руби сук, на котором сидишь! Вообще слезь с дерева, человек!
Ответ отправил: Minor (статус: 2-ой класс)
Отправлен: 11.01.2006, 19:23

Отвечает: Ерёмин Андрей
Здравствуйте, LanK!
Раз ответа на сообщение в мини-форуме не последовало, отвечу как есть. У TLabel ставим AutoSize = True и WordWrap = True (это по желанию/надобности). И после вывода текста в TLabel выполняем:
Panel1.Width:=Label1.Width+4;
Panel1.Height:=Label1.Height:=4;
При этом Label должен находиться как можно ближе к левому верхнему углу TPanel, тогда размеры будут совпадать.
А ещё есть функции TextWidth() и TextHeight() у каждого TCanvas, а TCanvas есть как у TLabel, так и у TPanel. Они возвращают ширину и высоту текста с учётом текущего шрифта.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 11.01.2006, 20:27


Вопрос № 33.061
Здравствуйте,уважаемые эксперты!!!
MediaPlayer:
Есть в листбоксе пути до песен: как сделать чтобы когда закончится песня начиналь бы следующая?
Отправлен: 11.01.2006, 20:02
Вопрос задал: Клёмин Сергей (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Приветствую!
Сергей, я же вам давал пример плей-листа, работающего совместно с TMediaPlayer. Там и эта функция была реализована. Нужно обрабатывать событие OnNotify и, если MediaPlayer.NotifyValue имеет значение nvSuccessful, то это значит, что текущая песня закончилась. В приложении код той процедуры. Это был вопрос 32475.

Приложение:

---------
Работа - не волк, а произведение силы на расстояние!

Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 11.01.2006, 20:23

Отвечает: sir henry
Здравствуйте, Клёмин Сергей!
Нужно брать из листбокса файлы в цикле.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 12.01.2006, 06:58


Вопрос № 33.063
Здравствуйте,уважаемые эксперты.
Как узнать сколько строк заполнено в ListBox?
Отправлен: 11.01.2006, 21:09
Вопрос задал: Dushin Igor (статус: 2-ой класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Hello, Dushin Igor!
Count:=ListBox.Items.Count;
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 11.01.2006, 21:15

Отвечает: Slava
Здравствуйте, Dushin Igor!
var
i:integer;
begin
i:=ListBox1.Items.Count;
end;
Ответ отправил: Slava (статус: 5-ый класс)
Отправлен: 11.01.2006, 21:30

Отвечает: REFERI
Здравствуйте, Dushin Igor!
Число строк = ListBox.Count
Вот например...
Edit1.Text:=IntToStr(ListBox1.Count);
Удачи!

---------
Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Студент)
Отправлен: 11.01.2006, 21:39

Отвечает: Schmak
Здравствуйте, Dushin Igor!
Listbox1.Items.Count - свойство типа integer содержит кол-во строк в ListBoxe
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 12.01.2006, 05:49

Отвечает: sir henry
Здравствуйте, Dushin Igor!
Для этого достаточно прочитать свойство ListBox.Items.Count.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 12.01.2006, 07:02

Отвечает: Diman_A
Здравствуйте, Dushin Igor!
Свойство ListBox1.Items.count - возвращает число строк в listbox типа integer
Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 12.01.2006, 11:06

Отвечает: Ataman N. N.
Здравствуйте, Dushin Igor!
Свойство Items.Count
Ответ отправил: Ataman N. N. (статус: 5-ый класс)
Отправлен: 13.01.2006, 19:15


Вопрос № 33.064
Здраствуйте,
Помогите пожалуйста срочно нужно написать калькулятор, который могбы слажывать любые цыфру, например: 123456789123456789123446+число с 50 цыфр.
Дайте кусочки исходника...
Заранее спасибо.
Отправлен: 11.01.2006, 21:40
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Minor
Здравствуйте, Станислав!
Единствунное, что могу посоветовать, это использовать переменные типа Extended
там большой диапазон....
3.6 x 10^-4951 .. 1.1 x 10^4932
что-то типа того
Edit3.Text:=FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
---------
Не руби сук, на котором сидишь! Вообще слезь с дерева, человек!
Ответ отправил: Minor (статус: 2-ой класс)
Отправлен: 11.01.2006, 23:45

Отвечает: Schmak
Здравствуйте, Станислав!
Называется это длинной арифметикой. Если Вам надо складывать целые числа (можно конечно немного потрудится и сделать для чисел с фиксированнной или даже плавающей запятой) с высокой (полной) точностью то во-первых надо завести новую тип данных и создать функции (процедуры) для работы с ним. Такой тип придуман не мною, а описан в книге (под рукой нет, названия точно сказать не могу)
const maxdigit=200; //Кол-во разрядов в числе (под разрядом подразумевается число от 0 до basis
basis=10000; //Максимальное число записанное в разряде+1
type longnum=array [0..maxdigit] of integer;
Данный тип представляет собой массив в нулевом байте записано длина числа (кол-во использованных элементов массива) в последующих байтах записано число по 4 цифры в каждом разряде. Число записано задом наперёд для облегчения вычислений. Например число 123456789 запишется как
3 6789 2345 1
Изучать работу класса лучше в отладчике Delphi? чтобы постоянно следить что происходит с числами.
Далее я приведу три подпрограммы необходимые для работы с числами
1)Ввод числа из строки

function tform1.readlong(str:string):longnum;
var str2:string;
k:integer;
begin
result[0]:=0;
while length(str)>=4 do
begin
inc(result[0]);
str2:=copy(str,length(str)-3,4);
result[result[0]]:=strtoint(str2);
delete(str,length(str)-3,4)
end;
if length(str)>0 then
begin
inc(result[0]);
result[result[0]]:=strtoint(str);
end;
end;

2)Вывод числа в строку
function tform1.writelong(n:longnum):string;
var i:integer;
str:string;
begin
result:='';
for i:=1 to n[0] do
begin
str:=inttostr(n[i]);
if i<>n[0] then while length(str)<4 do str:='0'+str;
result:=str+result;
end;
end;

3)Сложение двух чисел
function tform1.plus(a,b:longnum):longnum;
var d,i:integer;
c:longnum;
begin
if a[0] begin
c:=a;
a:=b;
b:=c;
end;
begin
result[0]:=a[0];
d:=0;
for i:=1 to b[0] do
begin
result[i]:=(a[i]+b[i]+d) mod basis;
d:=(a[i]+b[i]+d) div basis
end;
for i:=b[0]+1 to a[0] do
begin
result[i]:=(a[i]+d) mod basis;
d:=(a[i]+d) div basis;
end;
if d>0 then
begin
inc(result[0]);
result[result[0]]:=d;
end;
end;
end;

Если что-то не понятно обращайтесь в личную почту.
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 12.01.2006, 05:49
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Станислав!
Можно обрабатывать не число само по себе, а строки поразрядно. Т.е. берете каждую цифру из строки с длинным числом и складываете ее с соответствующим разрядом в другом числе. Если появляется перенос - запоминаете его, чтобы потом сложить со следующим разрядом.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 12.01.2006, 07:05


Вопрос № 33.072
Здравствуйте уважаемые эксперты, помогите пожалуйста!!! В Delphi 7 нет TClientSocket, а мне очень нужна его функция SendText. Подскажите, может в Delphi 7 есть замена TClientSocket или подскажите где скачать аналогичный компонент. Заранее СПАСИБО!!!
Отправлен: 11.01.2006, 23:31
Вопрос задал: maCC (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ujin Antikvar
Здравствуйте, Яковлев Александр Александрович!

Ну почему нет есть, он даже установлен просто скрыт.

Значит сначала проверяете подключен ли dclsocket70.bpl
Меню Component->Install Packages...->Add. Указываем файл $(DELPHI)indclsockets70.bpl подключив его нажимаем OK

Затем нажимаем правой кнопкой на панели компонентов и в появивщимся меню заходим в properties и выбираем pages - [All]. И если вы хорошо просмотрите то вы увидите два этих компонента TClientSocket и TServerSocket. (Чтобы долго не искать советую отсортировать по Package и найти там dclsocket70).

Вот и все просто надо было поискать.

Удачи!!!
---------
"Будущее принадлежит тем, кто верен своей мечте" - Элеонора Рузвельт
Ответ отправил: Ujin Antikvar (статус: 5-ый класс)
Отправлен: 12.01.2006, 00:08
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое! Не успел отправить вопрос иуже получил ответ.

Отвечает: Delphin
Здравствуйте, Яковлев Александр Александрович!
Подключите dclsockets** библиотеку и все вернется.
Она лежит в директории с Delphi помоему там lib =)

---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 12.01.2006, 01:33
Оценка за ответ: 4
Комментарий оценки:
ПАСИБА! Уже знаю.

Отвечает: sir henry
Здравствуйте, MaCC!
ClientSocket есть, только он не установлен в панель Дельфи. Надо установить пакет dclsocket70.bpl (через Component-Install Packages) и пользоваться.
Если не заморачиваться чисто на сокеты, то есть богатая палитра компонентов Indy. Для многих вещей она более удобна, чем сокеты.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 12.01.2006, 07:10
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Вопрос № 33.076
Кто знает как в консольном приложении использовать таймер, например, сделать чтобы через каждые 5 секунд выводился текст?
Отправлен: 12.01.2006, 00:37
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Minor
Здравствуйте, REFERI!
например так:

for i:=0 to 100 do
begin
writeln('some text');
sleep(5000);
end;

---------
Не руби сук, на котором сидишь! Вообще слезь с дерева, человек!
Ответ отправил: Minor (статус: 2-ой класс)
Отправлен: 12.01.2006, 01:03
Оценка за ответ: 5
Комментарий оценки:
Точно, ведь для моего случая это подойдет.
А я мудрил... Спасибо. Эксперт начального класса - все просто. Так держать! И класс будет расти!

Отвечает: sir henry
Здравствуйте, REFERI!
Именно таймер? А функцию sleep() Вы не хотите использовать?
Дело в том, что для отслеживания сообщений таймера нужна будет оконная процедура, которой в консольном приложении у Вас нету.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 12.01.2006, 07:16

Отвечает: Ерёмин Андрей
Здравствуйте, REFERI!
К ответам остальных хочу добавить. Конечно, нужно использовать функцию sleep(). Но эта функция при большом интервале задержки способна создать ощущение, что программа зависла. Чтобы этого не происходило, можно заменять длинные промежутки короткими, которые в сумме дадут длинный, например:
вместо Sleep(10000); лучше написать: for i:=1 to 10 do Sleep(1000);

---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 12.01.2006, 08:33


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

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

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

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

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


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


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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное