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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2010, 06:00   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Цикл подстановки в Edit из StringGrid

Доброе утро! Пытаюсь сделать цикл подстановки значений из StringGrid-а. В нем 1 столбец и, например, 5 строк. В них значения. Нужно через заданный интервал подставлять эти пять значений в Edit1 для дальнейших действий. Эти значения используются для рисования. Вот я пытался сделать так:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
begin
 i:=0;
 for i:=0 to 4 do
 begin
  markSize.X:=531;
  markSize.Y:=295;

  generateBackground();
  generateMark(10,10, strtoint64(Form1.StringGrid1.Cells[0,i]));
  deleteBackground();
 end;
end;
Но не канает. Подставляется только последнее значение . Есть идеи?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 06:47   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

i глобальной сделать.(с инициализацией в ноль)
и код выйдет таким.
Код:
begin
 markSize.X:=531;
 markSize.Y:=295;
 generateBackground();
 generateMark(10,10, strtoint64(Form1.StringGrid1.Cells[0,i]));
 deleteBackground();
 inc(i);
 if i>4 then i:=0;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.07.2010, 07:18   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Посталвил сей код в таймер. Но при запуске таймера выдается только значение, которое в первой самой ячейке). А надо то все)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 08:17   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
 i: integer;
begin
 i:=0;
 for i:=0 to 4 do
 begin
  markSize.X:=531;
  markSize.Y:=295;
  generateBackground();
  Application.ProcessMessages;
  sleep(100);//необязательно
  generateMark(10,10, strtoint64(Form1.StringGrid1.Cells[0,i]));
  deleteBackground();
 end;
end;
SERG1980 вне форума Ответить с цитированием
Старый 06.07.2010, 08:29   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Неа, не работает. Из таблицы используется теперь только последнее значение. Тогда первое, а сейчас последнее).
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 08:37   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
generateMark
Оч. смешно. Ты предлагаешь сидеть и телепатировать что это за generateMark такая?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.07.2010, 08:49   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Это самописная функция
Код:
procedure generateMark(x,y:integer; value:int64);
begin
  generateBinaryTable(value);
  generateLabel(value);
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 08:54   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю как остальным а мне ниче не понятно...
Задачу рассказывай полностью, иначе тебя помидорами закидают.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.07.2010, 09:05   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Вот листинг:
Код:
procedure generateBackground();
begin
  {background.Create;
  background.SetSize(markSize.X, markSize.Y);}
  Form1.Image1.Canvas.Pen.Color:=clWhite;
  Form1.Image1.Canvas.Brush.Color:=clWhite;
  Form1.Image1.Canvas.Pen.Width:=1;
  Form1.Image1.Canvas.Rectangle(0, 0, markSize.X, markSize.Y);

  Form1.Image1.Canvas.Pen.Color:=clBlack;

  Form1.Image1.Canvas.Pen.Width:=1;
  Form1.Image1.Canvas.MoveTo(0, 0);
  Form1.Image1.Canvas.LineTo(markSize.X, 0);
  Form1.Image1.Canvas.LineTo(markSize.X, markSize.Y);
  Form1.Image1.Canvas.LineTo(0, markSize.Y);
  Form1.Image1.Canvas.LineTo(0, 0);

  Form1.Image1.Canvas.Pen.Width:=6;
  Form1.Image1.Canvas.MoveTo(50, 27);
  Form1.Image1.Canvas.LineTo(480, 27);
  Form1.Image1.Canvas.LineTo(480, 268);
  Form1.Image1.Canvas.LineTo(50, 268);
  Form1.Image1.Canvas.LineTo(50, 27);

  Form1.Image1.Canvas.MoveTo(97, 74);
  Form1.Image1.Canvas.LineTo(432, 74);

  Form1.Image1.Canvas.Brush.Color:=clBlack;
  Form1.Image1.Canvas.Rectangle(50, 27, 50+48, 27+48);
  Form1.Image1.Canvas.Rectangle(480-48, 27, 480, 27+48);
  Form1.Image1.Canvas.Rectangle(50, 268-48, 50+48, 268);

  Form1.Image1.Canvas.Brush.Color:=clWhite;
  Form1.Image1.Canvas.Rectangle(480-48, 268-48, 480, 268);
end;

procedure deleteBackground();
begin

end;
procedure generateBinaryTable(value:int64);
const
  edge=26;
  probel=10;
  startX=170 -50 +5;
  startY=103 -27 +10;
var
i, j, x, y, counter:integer;
map: array[1..8, 1..5] of boolean;//40 - 37 =3 proverocnih
begin
  counter:=0;
  for i := 1 to 8 do
  begin
    for j := 1 to 5 do
    begin
      counter:=counter+1;
      if counter<=37 then
      begin
        if (value shr (counter-1)) mod 2 = 1  then
        begin
          map[i, j]:=true;
          form1.Memo1.Lines.Add(inttostr(counter)+' '+'1');
        end
        else
        begin
          map[i, j]:=false;
          form1.Memo1.Lines.Add(inttostr(counter)+' '+'0');
        end;
      end
      else
      begin
        map[i, j]:=true;
      end;
    end;
  end;
    


  Form1.Image1.Canvas.Brush.Color:=clBlack;
  for i := 1 to 8 do
  begin
    for j := 1 to 5 do
    begin
      if  map[i, j] then
      begin
        x:= startX + ( (i-1) * edge ) + ( (i-1) * probel );
        y:= startY + ( (j-1) * edge ) + ( (j-1) * probel );
        Form1.Image1.Canvas.Rectangle(x, y, x + edge, y + edge);
      end;
    end;
  end;
end;

procedure generateLabel(value:int64);
begin
  Form1.Image1.Canvas.Pen.Color:=clBlack;
  Form1.Image1.Canvas.Brush.Color:=clWhite;
  Form1.Image1.Canvas.Pen.Width:=1;
  Form1.Image1.Canvas.Font.Size:=30;
  Form1.Image1.Canvas.TextOut(170-10, 25, IntToStr(value));

  Form1.Image1.Canvas.Pen.Width:=6;

  Form1.Image1.Canvas.MoveTo(50, 27);
  Form1.Image1.Canvas.LineTo(480, 27);

  Form1.Image1.Canvas.MoveTo(97, 74);
  Form1.Image1.Canvas.LineTo(432, 74);
end;

procedure generateMark(x,y:integer; value:int64);
begin
  generateBinaryTable(value);
  generateLabel(value);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
begin
// Form1.Timer1.Enabled:=True;
   markSize.X:=531;
  markSize.Y:=295;

  generateBackground();
  generateMark(10,10, strtoint64(form1.Edit1.Text));
  deleteBackground();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Form1.StringGrid1.Cells[0,0]:='89500000000';
 Form1.StringGrid1.Cells[0,1]:='89500621533';
 Form1.StringGrid1.Cells[0,2]:='89027652871';
 Form1.StringGrid1.Cells[0,3]:='89500802365';
 Form1.StringGrid1.Cells[0,4]:='89084561573';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  i:=0;
  for i:=0 to 4 do
  begin
   markSize.X:=531;
   markSize.Y:=295;
   generateBackground();
   Application.ProcessMessages;
//   Sleep(100);
   generateMark(10,10, strtoint64(form1.StringGrid1.Cells[0,i]));
   deleteBackground();
//  if i>4 then i:=0;
//  inc(i);
  end;
end;
Рисуется специальная фигура. Да не в этом коде дело-то. Все что мне нужно - это чтобы значения брались из таблицы и для каждой рисовалась своя фигура. Нужен цикл прохода по все записям в StrinGride.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 06.07.2010, 09:13   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   markSize.X:=531;
   markSize.Y:=295;
   generateBackground();
   Application.ProcessMessages;
   generateMark(10,10, strtoint64(form1.StringGrid1.Cells[0,tag]));
   if tag=4 then tag:=0 else tag:=tag+1;
   deleteBackground();
end;
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск текста из edit по StringGrid [?] dalien Общие вопросы Delphi 3 18.06.2009 22:35
из Edit в StringGrid Xeon332 Общие вопросы Delphi 11 25.05.2009 08:28
Edit vs StringGrid artemavd Общие вопросы Delphi 3 13.07.2008 11:56
Edit мы StringGrid artemavd Общие вопросы Delphi 0 12.07.2008 13:50
Заполнение StringGrid из Edit Инна Помощь студентам 13 03.05.2007 13:44