Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 15:12   #11
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Я бы сделал как-то так (Если конечно правильно понял задачу ):
Код:
// Это класс Вашей формы
TForm1 = ...
...
// Добавляем примерно такой код
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;
...

// Эта функция вызывается каждый раз, когда Вам требуется получить значение элемента массива
// Параметры:
//   index - индекс нужного элемента массива
// Результат:
//   значение элемента массива
function TForm1.GetValue(index: integer): integer;
begin
  Result := values[index];
  // Можно так же проверки выхода за границы массива замутить
  // или с шейпами по необходимости что-то совершить
end;

// Эта функция вызывается каждый раз, когда изменяете элемент массива
// Параметры:
//   index - индекс изменяемого элемента
//   new_value - новое значение элемента
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;
Только не забудьте в каком-нибудь обработчике TForm1.OnShow или еще где, заполнить массив shape. Элементов мало, так что можно тупо:
Код:
shape[1] := Shape1;
shape[2] := Shape2;
...
Соответственно все операции с массивом теперь только через свойство Value:
Код:
Value[5] := 10; // Здесь вызывается SetValue
i := Value[3];   // Здесь вызывается GetValue
pu4koff вне форума Ответить с цитированием
Старый 08.04.2009, 08:37   #12
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Я бы сделал как-то так (Если конечно правильно понял задачу ):
Код:
// Это класс Вашей формы
TForm1 = ...
...
// Добавляем примерно такой код
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;
...

// Эта функция вызывается каждый раз, когда Вам требуется получить значение элемента массива
// Параметры:
//   index - индекс нужного элемента массива
// Результат:
//   значение элемента массива
function TForm1.GetValue(index: integer): integer;
begin
  Result := values[index];
  // Можно так же проверки выхода за границы массива замутить
  // или с шейпами по необходимости что-то совершить
end;

// Эта функция вызывается каждый раз, когда изменяете элемент массива
// Параметры:
//   index - индекс изменяемого элемента
//   new_value - новое значение элемента
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;
Только не забудьте в каком-нибудь обработчике TForm1.OnShow или еще где, заполнить массив shape. Элементов мало, так что можно тупо:
Код:
shape[1] := Shape1;
shape[2] := Shape2;
...
Соответственно все операции с массивом теперь только через свойство Value:
Код:
Value[5] := 10; // Здесь вызывается SetValue
i := Value[3];   // Здесь вызывается GetValue
SPS poprobyu zamutit',esli 4e napishu.
KuevProger вне форума Ответить с цитированием
Старый 10.04.2009, 08:59   #13
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Мне подсказали сделать по другому:
Код:
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[i].Value_V:=Value[i];
  If   (Logic[i].Value_V>=-0.5) and (Logic[i].Value_V<=0.5) Then Logic[i].Value_Log:=0;
  If   (Logic[i].Value_V>=4.5) and (Logic[i].Value_V<=5.5) Then Logic[i].Value_Log:=1;
  If    Logic[i].Value_Log=0 Then Logic[i].Indikator.Brush.Color:=clLime;
  If    Logic[i].Value_Log=1 Then Logic[i].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[i].Indikator:=TShape.Create(Form1);
 Logic[i].Indikator.Parent:=Form1.Panel1;
 Logic[i].Indikator.Top:=18;
 Logic[i].Indikator.Left:=500+i*27;
 Logic[i].Indikator.Height:=20;
 Logic[i].Indikator.Width:=20;
 Logic[i].Indikator.Shape:=stCircle;
 Logic[i].Indikator.Brush.Color:=clLime;
 Logic[i].Indikator.Hint:='K'+IntToStr(i);
 Logic[i].Indikator.ShowHint:=True;
 Logic[i].Indikator.Visible:=True;
 Logic[i].Ind_Name.Caption:=КАК ТУТ НАДО ПИСАТЬ ИЛИ ТАК НЕ ПРАВИЛЬНО???;
 end;
end;
From Stilet: код пости с тегом по кнопке #. Еще одно нарушение - закрою тему

Последний раз редактировалось Stilet; 10.04.2009 в 09:40.
KuevProger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Shape вверх russian-stalker Общие вопросы Delphi 1 12.09.2008 19:52
Передача параметра компаненту на другой форме. Kukkk Компоненты Delphi 1 28.09.2007 00:31
timer и shape гера Помощь студентам 4 16.04.2007 20:14
Вопрос по компаненту VirtualTreeView gyvenor Компоненты Delphi 13 28.02.2007 11:34