Вопрос № 143682: Доброго времени суток! Предстал перед задачей написать небольшую программку удалённого контроля. Объясните пожалуйста следующий момент: как в Borland Delphi <b>7</b> осуществить передачу сообщения от серверного приложения клиентскому по сети, е...Вопрос № 143684: Уважаемые эксперты, подскажите пожалуйста: какой фильтр нужно установить в OpenDialog, чтобы можно было выбрать не файл, а папку?...Вопрос № 143758: Уважаемые эксперты, у меня такой вопрос: как в Delphi проверить наличие элемента в списке. Например у меня есть переменная <font color="green"> sStrings </font> типа <font color="green"> tstrings </font>. В программе идет присвоение значений переменн...
Вопрос
№ 143.682
Доброго времени суток! Предстал перед задачей написать небольшую программку удалённого контроля. Объясните пожалуйста следующий момент: как в Borland Delphi 7 осуществить передачу сообщения от серверного приложения клиентскому по сети, если известен IP-адрес удалённой машины? Компьютеры находятся в одной рабочей группе. Зараннее благодарен.
Отправлен: 11.09.2008, 22:12
Вопрос задал: SHERRY (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Олекса aka SoW
Здравствуйте, SHERRY! Самый простой способ - использовать компоненты TServerSocket и TClientSocket. Они располагаются на закладке Internet. Если там нет етих компонентов, то Вам нужно их установить (в Делфи 6 и 7 они по умолчанию не устанавливаются). Для єтого найдите на установочном диске Делфи файл dclsocketsXX.bpl, где ХХ - номер версии Делфи. Скопируйте его куда-нибудь на жесткий диск, например в поддиректорию bin директории, куда установлен Делфи. В этой папке находятся все bpl-файлы и вполне разумно
поместить туда и этот.
После этого в Делфи нужно выбрать пункт Install Package в меню Component. Откроется окно, в нем нажмите кнопку Add, и перед Вами появится стандартное окн открытия файла. Выберите скопированный файл dclsocketsXX.bpl. После етого можете закрывать все открытые окна кнопками OK.
Теперь непосредственно к тому, как передать сообщение:
1) Серверная часть, которая получает сообщение и соответственно его обрабатывает. - На форму
нужно поместить компонент TServerSocket. В его свойстве Port задаем нужный порт (Любое значение от 1024 до 65000). - При запуске программы пишем строчку ServerSocket1.Activate:=true; - она запускает сервер и открывает указанный порт в ожидании соединения. - Теперь в событии OnClientRead обрабатываем полученное сообщение, например: procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var s:String; begin s:= Socket.ReceiveText; if s='R' then
ExitWindowsEx(EWX_SHUTDOWN,0); end;
2) Клиентская часть: ставим на форму компонент TClientSocket. Пример его использования: procedure TForm1.Button1Click(Sender: TObject); begin clientsocket1.host:='172.27.8.100'; clientsocket1.active:=true; clientsocket1.Socket.SendText('Текст сообщения'); clientsocket1.active:=false; end;
Если что-то непонятно, пишите в ЛС
--------- Вiк живи - вiк учись.
Ответ отправил: Олекса aka SoW (статус: 3-ий класс)
Ответ отправлен: 11.09.2008, 23:07 Оценка за ответ: 5 Комментарий оценки: Благодарю за подсказку!
Вопрос № 143.684
Уважаемые эксперты, подскажите пожалуйста: какой фильтр нужно установить в OpenDialog, чтобы можно было выбрать не файл, а папку?
Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Хукаленко Дмитрий! Для таких целей я использовал модуль BrowseFolderDlg (см. в приложении). Пишите в основной программе uses BrowseFolderDlg; А для выбора папки вызываете функцию BrowseFolder(handle, caption). В качестве handle указываете handle используемой формы. Caption - заголовок (по умолчанию пустой). Данный модуль был сделан мной из компонента BrowseFolderDlg.
Удачи!
Приложение:
Ответ отправил: Николай Владимирович / Н.В. (статус: Профессор) Россия, Москва ---- Ответ отправлен: 11.09.2008, 23:48 Оценка за ответ: 5 Комментарий оценки: ОК. Спасибо.
Отвечает: Олекса aka SoW
Здравствуйте, Хукаленко Дмитрий! Для етого нужно использовать функцию SelectDirectory, которая объявлена в модуле FileCtrl. У нее три параметра: оглавление окна, корневой каталог, переменная-результат.
Пример использования:
... uses ... FileCtrl; ... var Dir:string; ... SelectDirectory('Укажите каталог установки программы', '', Dir);
В итоге откроется диалог выбора папки, и путь к ней окажется в переменной Dir.
--------- Вiк живи - вiк учись.
Ответ отправил: Олекса aka SoW (статус: 3-ий класс)
Ответ отправлен: 11.09.2008, 23:49 Оценка за ответ: 5 Комментарий оценки: Спасибо, попробую этот вариант.
Вопрос № 143.758
Уважаемые эксперты, у меня такой вопрос: как в Delphi проверить наличие элемента в списке. Например у меня есть переменная sStrings типа tstrings . В программе идет присвоение значений переменной, например,
Код:
sStrings[0]:='text1',
sStrings[1]:='text2'
и т. д. Как мне, например, проверить наличие эленента sStrings[6]?
Отправлен: 12.09.2008, 18:13
Вопрос задал: Romach (статус: 1-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Raptor3
Здравствуйте, Romach!
Непонятно что считается элементом в списке - чтоб номер элемента существовал?
sStrings.count - проверяем чтобы 6 (n) был меньше count
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 8-ой класс)
Ответ отправлен: 12.09.2008, 18:41 Оценка за ответ: 5
Отвечает: monah
Здравствуйте, Romach! В первую очередь замечу что элементы нумеруются с нуля и по порядку. тогда можно проверить в свойстве "Count" i:=sStrings.count; Учтите, что максимальный номер на еденицу меньше. Доступ к конкретному поля осуществляется так "s:=sStrings.strings[i];" Где "s" строковая переменная. Анологично можно искать элемент по его значению. i:=sStrings.indexOf(s); вернет номер поля (отсчет с нуля) или (-1) если ни чего не найдено.
--------- festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 12.09.2008, 19:54 Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ. Просто я думал, что переменным можно присваивать значения так: srings[5]:=\'string\', когда нет предыдущих элементов списка.