Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.11.04;
Скачать: CL | DM;

Вниз

Не выполняется код в функции   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
2-1473336347
Анна
2016-09-08 15:05
2018.11.04
Запрос на кол-во хранимых процедур


2-1473404951
валя
2016-09-09 10:09
2018.11.04
Указатели


2-1473395811
Abcdef123
2016-09-09 07:36
2018.11.04
Использование CreateProcess. Как показать нужную форму после


2-1474184193
Алекс Серов
2016-09-18 10:36
2018.11.04
Как открыть таблицу Эксель под паролем?


2-1474206922
KropotkinGosha
2016-09-18 16:55
2018.11.04
Не выполняется код в функции