|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
This form of method call only allowed for class methods
Здравствуйте, делаю в Delphi 7 чат (пока сервер) на ServerSocket1 в блокирующем режиме. Делаю не с нуля, а собирая по частям из различных программ(так как сам не разбираюсь).
Необходимо по нажатию кнопки, сделать рассылку сообщения из мемо всем клиентам. Основа сервера из этой статьи. Попытался сделать: Основа сервера Код:
type TData = record fCommand: Word; fNick: String[MAX_STRING]; fColor: Integer; fMessages: array [0..MAX_CHAR - 1] of Char; end; PData = ^TData; ............................ implementation uses uServerThread; {$R *.dfm} type n=class (uServerThread.TServerThread); .................................... procedure TfMain.Button3Click(Sender: TObject); var adata:tData; i:Integer; begin with adata do begin fCommand:=10010; fNick:='Àäìèíèñòðàòîð'; fColor:=4; for i := 0 to Length(memo2.text) - 1 do fMessages[i]:=Char(memo2.text[i + 1]); n.SendAllClient(adata); end; end; Код:
procedure TServerThread.SendAllClient(var aData: tData); var i: Word; begin try for i := 0 to ServerSocket.ActiveThreads - 1 do begin ServerSocket.Connections[i].SendBuf(aData, SizeOf(aData)); end; except end; end; При компиляции происходит ошибка: [Error] fmMain.pas(328): This form of method call only allowed for class methods Есть другой способ переноса данных в поток? (При необходимости могу выложить весь проект) |
#2
|
||||
|
||||
Ты бы лучше показал строчку, на которой возникает ошибка.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
||||
|
||||
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
Ага похоже надо гдето T убрать или добавить, не видно так в коде без выделения ошибки...
|
#5
|
||||
|
||||
Если это не класс-функция.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
|||
|
|||
Извиняюсь, просто писал после ночи сидения над ней и мне казало уже все очевидным))) Программа состоит из юнита формы (который работает с компонентами) и юнита потоков (который работает с клиентами).
В юните потоков есть класс TServerThread = class(TServerClientThread), у которого есть процедура рассылки всем клиентам сообщения Код:
procedure TServerThread.SendAllClient(var aData: tData); var i: Word; begin try for i := 0 to ServerSocket.ActiveThreads - 1 do begin ServerSocket.Connections[i].SendBuf(aData, SizeOf(aData)); end; except end; end; В основной форме пытаюсь вызвать это процедуру и передать ей значения на нажатие кнопки. Код:
type TData = record fCommand: Word; fNick: String[MAX_STRING]; fColor: Integer; fMessages: array [0..MAX_CHAR - 1] of Char; end; PData = ^TData; ............................ implementation uses uServerThread; {$R *.dfm} type n=class (uServerThread.TServerThread); .................................... procedure TfMain.Button3Click(Sender: TObject); var adata:tData; i:Integer; begin with adata do begin fCommand:=10010; fNick:='Администратор'; fColor:=4; for i := 0 to Length(memo2.text) - 1 do fMessages[i]:=Char(memo2.text[i + 1]); n.SendAllClient(adata); end; end; |