|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Ты бы лучше показал строчку, на которой возникает ошибка. | 
| 
			 
			#3  
			
			
			
			
		 | ||||
| 
 | ||||
|   | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   Ага похоже надо гдето T убрать или добавить, не видно так в коде без выделения ошибки... | 
| 
			 
			#5  
			
			
			
			
		 | ||||
| 
 | ||||
|   Если это не класс-функция. | 
| 
			 
			#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; |