Форум: "Начинающим";
Текущий архив: 2018.11.04;
Скачать: [xml.tar.bz2];
ВнизНе выполняется код в функции Найти похожие ветки
← →
KropotkinGosha (2016-09-18 16:55) [0]Работаю Delphi XE8, Windows 7 Pro.
Есть 2 модуля: вспомогательный и главный. Вот код - главный...
unit uTestingMB;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MasterTCP;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
mas1: array of Double;
MB1: TMasterTCP;
size1: Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
size1:= 2;
SetLength(mas1, size1);
mas1[0]:= 1.1;
mas1[1]:= 1.1;
MB1.WriteToServer(mas1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MB1:= TMasterTCP.Create(777);
end;
end.
И вспомогательный:
unit MasterTCP;
interface
uses
IdTCPServer, // Тут лежит компонент
System.SysUtils, // Тут лежат вспомогательные процедуры
IdContext, //Тут лежит AContext: TIdContext
IdGlobal, // Тут лежит тип данных TIdBytes
Vcl.Dialogs;
type
WType=(wtDouble);
type
TMasterTCP = class(TObject)
private
WhatType: WType; // Показывает, с каким типом данных работаем
Port: Integer; //Порт для работы
doubleValue: array of Double; //Массив со значениями типа Double
IdTCPServer: TIdTCPServer; // Компонент обеспечивает связь
// second level initialization
// private helper methods
function GenerateResponce(BufForReading: TIdBytes): TIdBytes;
function GenerateResponceFloat(BufForReading: TIdBytes): TIdBytes; // Делаем ответ для типа Double
// events handlers
procedure TCPServerExecute(AContext: TIdContext);
public
procedure WriteToServer(_Value: array of Double); overload;
constructor Create(_Port: Integer);
destructor Destroy; override;
end; // TMasterTCP
implementation
uses uTestingMB;
function TMasterTCP.GenerateResponceFloat(BufForReading: TIdBytes): TIdBytes;
var
x: Integer;
begin
Если пишу ShowMessage("чё нибудь - то отображается")
Если пишу Form1.Label1.Caption := "чё нибудь - не отображается";
Всякие присваивания переменным - не присваиваются, например
x:= 1; - Неприсваивается(строка кода игнорируется)
Не понимаю что может быть не так... Помогите пожалуйста
end;
function TMasterTCP.GenerateResponce(BufForReading: TIdBytes): TIdBytes;
begin
case WhatType of
wtDouble: Result:=GenerateResponceFloat(BufForReading);
end;
end;
procedure TMasterTCP.WriteToServer(_Value: array of Double);
var
i: Integer;
begin
SetLength(doubleValue, Length(_Value));
for i := 0 to Length(_Value) - 1 do
doubleValue[i]:= _Value[i];
WhatType:= wtDouble; //Оповещаем что работаем с типом Double
end;
procedure TMasterTCP.TCPServerExecute(AContext: TIdContext);
var SizeReadBuf:integer;
BufForReading: TIdBytes; // Буфер для приёма посылок
BufForWriting: TIdBytes;
begin
SizeReadBuf:= AContext.Connection.IOHandler.InputBuffer.Size; //Определяем
//длину посылки, которая поступила на порт
if SizeReadBuf = 12 then //Если 12 байт пришло на порт, то это именно те
//данные
begin
AContext.Connection.IOHandler.ReadBytes(BufForReading, SizeReadBuf); //Чи-
//таем данные, которые пришли с порта.
BufForWriting:=GenerateResponce(BufForReading);//В 11-ом байте информация о коли-
// честве тэгов в запросе.
//Передать сформированную посылку
AContext.Connection.IOHandler.Write(BufForWriting, Length(BufForWriting));
end;
end;
constructor TMasterTCP.Create(_Port: Integer);
begin
inherited Create;
Port:= _Port;
IdTCPServer:= TIdTCPServer.Create(Form1);
with IdTCPServer do
begin
DefaultPort:= Port;
OnExecute:= TCPServerExecute;
Active:= true;
end;
end;
destructor TMasterTCP.Destroy;
begin
FreeAndNil(IdTCPServer);
inherited Destroy;
end;
end.
← →
Игорь Шевченко © (2016-09-18 17:29) [1]Demos смотрел ?
← →
Rouse_ © (2016-09-18 17:36) [2]Осспади, тебя кто учил такой код писать?
> Если пишу Form1.Label1.Caption := "чё нибудь - не отображается";
Так дай ей отобразиться вызовом ProcessMessage
> Всякие присваивания переменным - не присваиваются, например
> x:= 1; - Неприсваивается(строка кода игнорируется)
Так оптимизатор выкидывает заведомо бессмысленные строчки кода.
Вообще все это (целиком) нужно выкинуть в корзину и написать правильно.
← →
KropotkinGosha (2016-09-18 18:05) [3]Всё, решился вопрос коллеги, тему можно закрывать
Я не указал размеры буфера для записи:
SizeWriteBuf:= Support1 + BufForReading[11]*2;
SetLength(Result, SizeWriteBuf);
Пс. Нормальный код выдаю, ООП на лицо, ничего не нужно переписывать.
← →
Rouse_ © (2016-09-18 18:52) [4]
> Нормальный код выдаю, ООП на лицо, ничего не нужно переписывать.
Ну раз так... Удачи, Дружище :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.11.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c