Вопрос по компоненту Shape

  • Автор темы KuevProger
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

KuevProger

Гость
#1
Есть некий массив данных Value[1..9] и есть 9 компонентов Shape. Считывание данных с массива идет в реальном времени.Нужно чтоб при считывании с массива 1 значения згарался Shepe1,при 2 Shepe2 и.т.д???
при необходимости могу написать листинг.
 
K

KuevProger

Гость
#5
НЕТ у нас в Казахстане проще 4ем вас а армией. 4тоб уйти в армию надо плотить деньги. :rolleyes:
т.к. желающих докуя :cool:. В общем мне ето не грозит.
ЗЫ. на гляди ;) :

private
values: array [1..9] of integer; // ну или какой там у Вас тип
shape: array [1..9] of TShape;
private
function GetValue(index: integer): integer;
procedure SetValue(index: integer; new_value: integer);
public
property Value[index: integer] read GetValue write SetValue;
end;
...

function TForm1.GetValue(index: integer): integer;
begin
Result := values[index];
end;

procedure TForm1.SetValue(index: integer; new_value: integer);
begin
// Может в массив уже записано это значение и нет смысла ничего менять
if (values[index] <> new_value) then
begin
values[index] := new_value;
// отображаем соответствующий элементу шейп
// можно соответственно какую-то другую логику сюда засунуть
// в зависимости от задачи
shape[index].Visible := true;
end;
end;
 
K

KuevProger

Гость
#8
Мне подсказали сделать по другому:
type
Logikal=record
Value_V:real;
Value_Log:byte;
Indikator:TShape;
Ind_Name:TLabel;
end;
var
DCB : TDCB;
CT: TCommTimeouts;
hPort : THandle;
i:integer;
ReadThread:TReadThread;
Value:array[1..9] of real;
Logic:array[1..9] of Logikal;
tick:integer=0;
tck_reg:Integer=0;
Period_Reg:integer=100;
Form1: TForm1;
NamePatch:String;
RegFileName:string;
RegFile:TFileStream;
str,st_file:string;
....
procedure Logical_indikator;
var
i:integer;

begin
for i:=1 To 7 do
begin
Logic.Value_V:=Value;
If (Logic.Value_V>=-0.5) and (Logic.Value_V<=0.5) Then Logic.Value_Log:=0;
If (Logic.Value_V>=4.5) and (Logic.Value_V<=5.5) Then Logic.Value_Log:=1;
If Logic.Value_Log=0 Then Logic.Indikator.Brush.Color:=clLime;
If Logic.Value_Log=1 Then Logic.Indikator.Brush.Color:=clRed;
end;
end;
ЗЫ. задачу я грам не правильно сформулировал)))

У меня еще появился вопрос? создал динамическую процедуру и не могу замутить чтоб подписывать значения лейблом вот код:
type
Logikal=record
Value_V:real;
Value_Log:byte;
Indikator:TShape;
Ind_Name:TLabel;
...

Procedure Create_Indicator();
begin

For i:=1 To 7 Do
begin
Logic.Indikator:=TShape.Create(Form1);
Logic.Indikator.Parent:=Form1.Panel1;
Logic.Indikator.Top:=18;
Logic.Indikator.Left:=500+i*27;
Logic.Indikator.Height:=20;
Logic.Indikator.Width:=20;
Logic.Indikator.Shape:=stCircle;
Logic.Indikator.Brush.Color:=clLime;
Logic.Indikator.Hint:='K'+IntToStr(i);
Logic.Indikator.ShowHint:=True;
Logic.Indikator.Visible:=True;
Logic.Ind_Name.Caption:=КАК ТУТ НАДО ПИСАТЬ ИЛИ ТАК НЕ ПРАВИЛЬНО???;
end;
end;
 
Статус
Закрыто для дальнейших ответов.