Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чат в локальной сети, Как сделать программу, для чата в л.с. 
:(
    Опции темы
Gigabyte
Дата 17.12.2004, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Студент-халявщик
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 1.11.2004
Где: ПЫтер

Репутация: нет
Всего: 3



Как сделать программу для чата лок. сети на Дельфи 7


--------------------

user posted image
user posted image
PM MAIL ICQ   Вверх
Akella
Дата 24.12.2004, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



В примера, поставляемых с Delphi, есть пример чата, я взял оттуда только примеры с сокетами, а все остальное переписал сам. Установил, старые, добрые TClientSocket, TServerSocet,

Этот пример модуля для формы, в которой выбираешь локальный комп.
Код

unit Net;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, StdCtrls, Buttons, ImgList;

type
 TNetForm = class(TForm)
   ListView1: TListView;
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   ImageList1: TImageList;
   Label1: TLabel;
   procedure FormShow(Sender: TObject);
   procedure BitBtn2Click(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
   procedure ListView1DblClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   Function FillNetLevel(xxx: PNetResource; list: TListItems) : Word;
   function GetComputer:String;
 end;

var
 NetForm: TNetForm;

implementation

{$R *.DFM}

function TNetForm.FillNetLevel(xxx: PNetResource; List:TListItems): Word;
Type
   PNRArr = ^TNRArr;
   TNRArr = array[0..59] of TNetResource;
Var
  x: PNRArr;
  tnr: TNetResource;
  I : integer;
  EntrReq,
  SizeReq,
  twx: THandle;
  WSName: string;
  LI:TListItem;
begin
    Result :=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER, xxx, twx);
    If Result = ERROR_NO_NETWORK Then Exit;
    if Result = NO_ERROR then
    begin
           New(x);
           EntrReq := 1;
           SizeReq := SizeOf(TNetResource)*59;
           while (twx <> 0) and
                 (WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
           begin
                 For i := 0 To EntrReq - 1 do
                 begin
                  Move(x^[i], tnr, SizeOf(tnr));
                  case tnr.dwDisplayType of
                   RESOURCEDISPLAYTYPE_SERVER:
                   begin
                      if tnr.lpRemoteName <> '' then
                          WSName:= tnr.lpRemoteName
                          else WSName:= tnr.lpComment;
                      LI:=list.Add;
                      LI.Caption:=copy(WSName,3,length(WSName)-2);
                      //list.Add(WSName);
                   end;
                   else FillNetLevel(@tnr, list);
                  end;
                 end;
           end;
           Dispose(x);
           WNetCloseEnum(twx);
    end;
end;


procedure TNetForm.FormShow(Sender: TObject);
begin
 ListView1.Items.Clear;
 FillNetLevel(nil,ListView1.Items);
end;

function TNetForm.GetComputer: String;
begin
 result:='';
 if (ShowModal=mrok)and(ListView1.Selected<>nil) then result:=ListView1.Selected.Caption;
end;

procedure TNetForm.BitBtn2Click(Sender: TObject);
begin
 ModalResult:=mrcancel;
end;

procedure TNetForm.BitBtn1Click(Sender: TObject);
begin
 modalresult:=mrok;
end;

procedure TNetForm.ListView1DblClick(Sender: TObject);
begin
 modalresult:=mrok;
end;

end.


Пример использования - нажимаем кнопку sbCopms на главной форме,показываем форму выбора компа, выбираем в листбоксе комп, нажимаем Ок
Код

procedure TMainForm.sbCopmsClick(Sender: TObject);
begin
edit1.Text:=NetForm.GetComputer;
end;


Код кнопки отправить
ForSend - глобальная переменная типа String
Код

 ForSend:=Memo1.Lines.Text;
 ClientSocket1.Close;
 ClientSocket1.Host:=edit1.Text;
 ClientSocket1.Open;


Код компонента TServerSocket - OnClientRead
memo2 - компонента TRichEdit
Код

procedure TMainForm.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
vResText :String;
L        :Integer;
begin
//получение текста
//если первый символ равен !, тогда выполняем файл
 vResText:=socket.ReceiveText;
 begin
   memo2.Lines.Add('>---ПОЛУЧЕНО СООБЩЕНИЕ ОТ: '+socket.RemoteHost+'---');
   L:=Length(Memo2.Text);
   memo2.SelStart:=Length(Memo2.Text);
   memo2.SelAttributes.Color:=clRed;
   memo2.Lines.Add('>'+vResText);
   memo2.SelLength:=L+Length(Memo2.Text);
   memo2.Lines.Add('>---КОНЕЦ СООБЩЕНИЯ-------');

   if not MainForm.Showing then MainForm.Show;
   if MainForm.WindowState=wsMinimized then
     application.Restore;
   SetForeGroundWindow(Application.MainForm.Handle);
   Memo1.SetFocus;
   if vSound then begin
     Windows.Beep(1000,100);
     Windows.Beep(1200,100);
     Windows.Beep(1300,100);
     Windows.Beep(1400,100);
     Windows.Beep(1300,100);
     Windows.Beep(1200,100);
     Windows.Beep(1100,100);
     Windows.Beep(1000,100);
   end;//if cbSound.Checked then begin
 end;//else
end;


Для отсылания текста
Код

procedure TMainForm.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 socket.SendText(ForSend);
//  ForSend:='';
end;


В случае ошибки
Код

procedure TMainForm.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 ErrorCode:=0;
 showmessage('Невозможно отправить сообщение!'+#13+
              'Возможно программа не запущена на другом компьютере!'+#13+
              'Сообщение будет сохранено на удаленном комппьютере'+#13+
              'и будет прочтено при запуске программы.');
end;

Добавлено @ 17:38
Если будет что не понятно справшивай
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.