Помгите с сообщениями в делфи

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Litvik, 5 Mar 2006.

  1. Litvik

    Litvik New Member

    Joined:
    4 Mar 2006
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Пацаны объясните:
    Смарите я на клиенте посылаю серверу цифру 1 ПР:
    procedure TFrm.knopClick(Sender: TObject);
    begin
    ClientSocket1.Socket.SendText('1');
    end; - правильно!!??
    на сервере пишу
    procedure TForm1.ServerSocketClientRead(Sender: TObject;
    Socket: TCustomWinSocket);
    var w:string;
    begin
    w:=socket.ReceiveText;- чтобы принял!!!???
    дальше пишу если принял '1' то выполнил действие
    ПРОБЛЕМА:
    Пишу я это на серваке
    var
    a,w: string;
    begin
    w:=socket.ReceiveText;
    if a='1' then
    if RadioButton1.Checked=true then b:=MB_Ok;
    if RadioButton2.Checked=true then b:=MB_YesNo;
    if SpeedButton1.Down=true then c:=0;
    if SpeedButton2.Down=true then c:=MB_ICONASTERISK;
    a:=StringReplace(edit2.Text,'|',Chr(13),[rfReplaceAll]);
    MessageBox(application.handle,PChar(a),PChar(edit1 .Text),
    b + c + MB_SYSTEMMODAL); - Это я так думаю
    он мне не определяет RadioButton1.Checked,SpeedButton1.Down которые находятся на клиенте
    По руски:
    мне нужно чтобы я нажал кнопку, сервер получил и показал мегасагу в зависимости какую я иконку поставлю и какие кнопки выберу

    Чо-то я написал сам не понял если кто-чё понял ответте
    ПЛИИЗЗЗЗ...... Вобщем чтобы кнопки работали как на кнопке "Тест" так и на сервере
    Вот исходник если чё кто сможет Скинте на мыло [email protected]
    http://newslm.narod.ru/HELP.rar
     
  2. Raider

    Raider Elder - Старейшина

    Joined:
    2 May 2005
    Messages:
    40
    Likes Received:
    5
    Reputations:
    4
    Т.е тебе всего-то надо указать тип сообщения ???

    Клиент:
    Code:
    var
      MsgType: UINT;
    begin
      MsgType := MB_ICONERROR;
      ClientSocket1.Socket.SendBuf(MsgType, SizeOf(UINT));
    end;
    
    Сервер:
    Code:
    var
      MsgType: UINT;
    begin
      Socket.RecvBuf(MsgType, SizeOf(UINT));
      MessageBox(Handle, '', '', MsgType);
    end;
    
     
  3. Litvik

    Litvik New Member

    Joined:
    4 Mar 2006
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Чё то я не могу догнать

    Можешь исходник посотреть, и исправить , плиззз.
    Мыло указано
     
  4. Raider

    Raider Elder - Старейшина

    Joined:
    2 May 2005
    Messages:
    40
    Likes Received:
    5
    Reputations:
    4
    Сурсы в конце топика, но чтоб всё было понятно я решил немного пояснить что к чему )
    -
    Для начала опишем структуру которая будет нести в себе информацию о сообщении,
    а канкретно:
    1) Текст сообщения.
    2) Заголовок соощения.
    3) Тип сообщения.
    Code:
    type
      TMyMsg = record
        Text   : array [0..127] of Char;
        Caption: array [0..127] of Char;
        MsgType: UINT;
      end; 
    
    Теперь обьявим её:
    Code:
    var
      MyMsg: TMyMsg; // Экземпляр структуры
    
    Далее по нажатию на Button1 заполним нашу структуру, и попробуем установить соединение с сервером:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ZeroMemory(@MyMsg, SizeOf(TMyMsg)); // На всякий случай чистим
      CopyMemory(@MyMsg.Text, PChar(StringReplace(Edit2.Text, '|', #13, [rfReplaceAll])), Length(Edit2.Text)); // Заносим в поле "Text" нашей структуры текст сообщения
      CopyMemory(@MyMsg.Caption, PChar(Edit1.Text), Length(Edit1.Text)); // Заносим заголовок сообщения
    
      // Определяем тип сообщения
      if not RadioButton1.Checked then MyMsg.MsgType := MB_YESNO;
      if not SpeedButton1.Down then MyMsg.MsgType := MyMsg.MsgType or MB_ICONASTERISK;
    
      ClientSocket1.Open; // Подключаемся
    end;
    
    Если подключение прошло успешно, то попробуем отправить нашу структуру:
    (событие "OnConnect" у ClientSocket1)
    Code:
    procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket)
    begin
      Socket.SendBuf(MyMsg, SizeOf(TMyMsg)); // Отправляем
      Socket.Close; // Отключаемся
    end;
    
    Переходим к серверу. В задачу сервера входит получение данных в виде структуры "TMyMsg", и собственно
    показ самого сообщения:
    Code:
    procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      MyMsg: TMyMsg;
    begin
      ZeroMemory(@MyMsg, SizeOf(TMyMsg)); // На всякий случай чистим
      if Socket.ReceiveLength >= SizeOf(TMyMsg) then  // Проверяем сколько байт находится во входящем буфере сокета(для того чтобы убедится что вся структура получена)
      begin
        Socket.ReceiveBuf(MyMsg, SizeOf(TMyMsg));
        // Дальше я надеюсь всё понятно :)
        with MyMsg do
          MessageBoxA(Application.Handle, Text, Caption, MsgType);
      end;
    end;
    
    Исходник: http://night444.narod.ru/help.rar
     
    #4 Raider, 8 Mar 2006
    Last edited: 8 Mar 2006
  5. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    ооо а ведь можно было и case заюзать...
     
  6. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    просто видишь судя по всему он новичок... и к чему его морочить буфферами и sizeof`ами? =) просто receivetext(функ-я) и case of (оператор)...
     
  7. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    видишь ли, когда в твоем псевдо-коде на делфи полно всяких сторонних CheckBox1.... сложно понять что тебе требуется... советую тебе срочно забросить занятие изучать делфи-компоненты, поставить Visual Studio и прочитать msdn...
     
  8. EvL

    EvL New Member

    Joined:
    24 Mar 2006
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    есть немало способов думаю заюзай разбивку пакетов те которые летят по сокетам там ничего сложного.