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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 08:19   #1
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию Вопрос по компаненту shape?

Есть некий массив данных Value[1..9] и есть 9 компонентов Shape. Считывание данных с массива идет в реальном времени.Нужно чтоб при считывании с массива 1 значения згарался Shepe1,при 2 Shepe2 и.т.д???
при необходимости могу написать листинг.
KuevProger вне форума Ответить с цитированием
Старый 07.04.2009, 08:23   #2
]Wowan[
Delphi forever
Форумчанин
 
Аватар для ]Wowan[
 
Регистрация: 13.01.2009
Сообщений: 113
По умолчанию

Листинг в студию
Программы на заказ Delphi, Pascal.
ася: 415 253 529. Мыло: wowan141750@gmail.com.
]Wowan[ вне форума Ответить с цитированием
Старый 07.04.2009, 08:41   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Считывание данных
И че там так долго считывается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2009, 10:44   #4
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

чо такое TShape и де он лежит я незнаю.. от пример аналогичного.. тока с компонентом TEdit
Код:
var i:integer;
   mas:array [0..8] of string;
begin
for i:=0 to Form1.ComponentCount-1 do
 if Components[i] is TEdit
  then TEdit(Form1.Components[i]).Text:=mas[StrToInt(Copy(TEdit(Form1Components[i]).Name, 5, 1))-1];
end;
где Form1 - это родитель обьекта
TEdit - тип обьекта
StrToInt(Copy(TEdit(Form1Components[i]).Name, 5, 1))-1 - этономер обьекта (точнее цыфра в конце имени..)
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 07.04.2009, 10:48   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

по мне так проще создать массив шэйпов т.к. проще к ним будет обращаться
SERG1980 вне форума Ответить с цитированием
Старый 07.04.2009, 12:30   #6
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Считывание данных происходит через СОМ порт с ADAM-4019 ADAM-4011
с периодом 0.1 сек
KuevProger вне форума Ответить с цитированием
Старый 07.04.2009, 12:33   #7
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от ]Wowan[ Посмотреть сообщение
Листинг в студию
Я какнить безплатно сделаю своими мозгами.

Вот листинг основной формы весь не влазиет
From Stilet: Ну если он не влазит весь то может не нужно его постить? Кому он нужнен такой?

Цитата:
Сообщение от Ntlegend Посмотреть сообщение
чо такое TShape и де он лежит я незнаю.. от пример аналогичного.. тока с компонентом TEdit
Код:
var i:integer;
   mas:array [0..8] of string;
begin
for i:=0 to Form1.ComponentCount-1 do
 if Components[i] is TEdit
  then TEdit(Form1.Components[i]).Text:=mas[StrToInt(Copy(TEdit(Form1Components[i]).Name, 5, 1))-1];
end;
где Form1 - это родитель обьекта
TEdit - тип обьекта
StrToInt(Copy(TEdit(Form1Components[i]).Name, 5, 1))-1 - этономер обьекта (точнее цыфра в конце имени..)
Это лажа какаято....

Последний раз редактировалось Stilet; 07.04.2009 в 13:12.
KuevProger вне форума Ответить с цитированием
Старый 07.04.2009, 13:15   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это лажа какаято....
Это не лажа а пример перебора контролов.
В твоем случае я бы применил FindNextControl для прохода последовально по шейпам
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2009, 13:29   #9
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это не лажа а пример перебора контролов.
В твоем случае я бы применил FindNextControl для прохода последовально по шейпам
Зачем ты убрал листинг он работий ток убрал не нужное чтоб влезло(((
KuevProger вне форума Ответить с цитированием
Старый 07.04.2009, 14:04   #10
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Попытка №2
Код:
FUNCTION TForm1.fm_exist(fmName: TComponentName): Boolean;
VAR I: Integer;
BEGIN
Result:=False;
for I := MDIChildCount-1 downto 0 do
  if (TForm(MDIChildren[I]).Name = fmName) then
     begin
     MDIChildren[I].BringToFront;
     MDIChildren[I].WindowState:=wsNormal;
     Result:=True;
     Break;
     end;
END;

Procedure Create_RegFile;
var
n:byte;
begin
RegFileName:=DateToStr(now)+'.txt';
if FileExists(RegFileName) Then
  begin
     RegFile := TFileStream.Create(RegFileName,fmOpenWrite or fmShareDenyRead);
     RegFile.Seek(0,soFromEnd);
  end
   else
  begin
     RegFile:=TFileStream.Create(RegFileName, fmCreate or fmOpenReadWrite or fmShareDenyNone);
 st_file:=st_file+'Время;';
 For  n:=1 To 9 Do
 begin
  st_file:=st_file+'Канал'+IntToStr(n)+';';
  end;
st_file:=st_file+#13+#10;
RegFile.Write(Pchar(st_file)^, Length(st_file));
  end;
  end;

procedure StartRead;
begin
ReadThread:=TReadThread.Create(True);
 with ReadThread do begin
  Priority:=tpNormal;
  FreeOnTerminate:=True;
  Resume;
 end;
end;

procedure clr_com;
begin
PurgeComm(hPort,PURGE_TXCLEAR);
PurgeComm(hPort,PURGE_RXCLEAR);
end;

Function InitADAM():boolean;
begin
 hPort := CreateFile(PChar('COM1'),GENERIC_READ + GENERIC_WRITE,0, nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if hPort = INVALID_HANDLE_VALUE then
 begin
 exit;
 end;
 if not GetCommState(hPort, DCB) then ShowMessage('Ошибка чтения настроек порта') else
  begin
  DCB.BaudRate := CBR_38400;
  DCB.ByteSize :=8;
  DCB.StopBits :=ONESTOPBIT;
  DCB.Parity   := 0;

  if not SetCommState(hPort, DCB) then  ShowMessage('Ошибка записи настроек порта');

CT.ReadTotalTimeoutConstant:=50;
CT.ReadIntervalTimeout :=25;
CT.ReadTotalTimeoutMultiplier :=0;
CT.WriteTotalTimeoutMultiplier := 0;
CT.WriteTotalTimeoutConstant := 0;
If Not SetCommTimeouts(hPort, CT) Then ShowMessage('Ошибка конфигурации таймаутов !!!');
if not SetupComm(hPort, 1024, 1024) then ShowMessage('Ошибка записи настроек буферов порта');
if PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then ;

Result:=True;
end;
end;

Function ReadValue(Module:byte):string;
var

ByteWritten,ByteReaded:dword;
ReadByte:array [0..255] of char;
begin
str:='#0'+inttostr(Module)+#13;
clr_com;
WriteFile(hPort,pchar(Str)^,Length(Str),ByteWritten,Nil);
ReadFile(hport,ReadByte,SizeOf(ReadByte),ByteReaded,Nil);
sleep(50);
Result:=ReadByte;
end;

Procedure TReadThread.Execute;
var
respone:string;
num,n,m:byte;

begin
For num:=1 To 2 Do
 begin
  respone:=ReadValue(num);
  sleep(10);
  If num=1 Then
   begin
    delete(Respone,1,1);
    n:=1;
    m:=1;
    While n<>57 Do
     begin
     Value[m]:=StrToFloat(copy(Respone,n,6));
     inc(n,7);
     inc(m,1);
     end;
   end;
   If num=2 Then
    begin
    delete(Respone,1,1);
    Value[9]:=StrToFloat(copy(Respone,1,6));
    end;
 end;


end;
   {+02.409+03.221+03.102+02.988+02.879+02.774+02.673+02.576}

{>+19.531}

Procedure WriteValue;
var
n:byte;
begin
st_file:='';
st_file:=st_file+TimeToStr(now)+';';
For  n:=1 To 9 Do
 begin
  st_file:=st_file+FloatToStr(value[n])+';';
  end;
st_file:=st_file+#13+#10;
RegFile.Write(Pchar(st_file)^, Length(st_file));
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
InitADAM;
NamePatch:=ExtractFilePath(Application.ExeName);
Create_RegFile;
Timer1.Enabled:=True;
Tm_registr.Interval:=Period_Reg;
 //часы
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
StartRead;
inc(tick,1);
StatusBar1.Panels[1].Text:=IntToStr(tick);
end;


procedure TForm1.Tm_registrTimer(Sender: TObject);
begin
WriteValue;
inc(tck_reg,1);
Label2.Caption:='Регистрация:'+IntToStr(tck_reg);
end;


procedure TForm1.FormClose(Sender: TObject;var Action: TCloseAction);
begin
 Timer1.Enabled:=False;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin

case ComboBox1.ItemIndex of
0: Period_Reg:=100;
1: Period_Reg:=1000;
2: Period_Reg:=10000;
end;
Tm_registr.Interval:=Period_Reg;
end;


procedure TForm1.Timer3Timer(Sender: TObject);
begin
time.Caption:=TimeToStr(Now);
end;

procedure TForm1.Sb_Start_RegistrClick(Sender: TObject);
begin
if Sb_Start_Registr.Down Then Tm_registr.Enabled:=True Else Tm_registr.Enabled:=False;
if Tm_registr.Enabled=true then
Sh_ind_reg.Brush.Color:=clred else Sh_ind_reg.Brush.Color:=clGray;
end;

procedure TForm1.Sb_tableClick(Sender: TObject);
begin
  if not fm_Exist('Form2') then
  begin
  Form2:=TForm2.Create(self);
  if not Form2.Visible then
  Form2.Show;
  StartVisio;
  end;
end;

procedure TForm1.Sb_trandeClick(Sender: TObject);
begin
  if not fm_Exist('Form3') then
  begin
  Form3:=TForm3.Create(self);
  if not Form3.Visible then
  Form3.Show;
  end;
end;
From Stilet: Начнем с того что оформлять код нужно правильно, тегом #

Последний раз редактировалось Stilet; 07.04.2009 в 14:34.
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