Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.03.2013, 10:00
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию Поиск прогрессбаров

у меня на форме динамически создаэтся 11 прогрессбаров:
Код:
      bars[i] := TProgressBar.Create(Form1);
      bars[i].Parent := Form1;
      bars[i].Left := 22;
      bars[i].Width := 521;
      bars[i].Top := 22+40*i;
На этой же форме есть таймер. при срабатывании таймера надо увеличить позицию бара на 1, как найти эти бары?
Пробывал так:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  pb  : TProgressBar;
  i : integer;
begin
 pb := TProgressBar(FindComponent('bars[' + IntToStr(i)+']'));
  if Assigned(pb) then
  begin
    pb.Position := pb.Position + 1;
    if pb.Position >= 100 then
      inc(pBar);
    if pBar > 11 then
    begin
      Timer1.Enabled := False;
      Button1.Enabled := true;
    end;
  end;
end;
Код компилируется - нормально он написан /без ошибок/ но в прогресбарах на форме позиция не меняется...
Ясно что я неправильно выбираю прогресбары.
Как их ПРАВИЛЬНО выбирать?
Ответить с цитированием
  #2  
Старый 24.03.2013, 10:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
pb := bars[i];
bars[] сделать полем формы
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 24.03.2013, 10:15
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Код понял, а как сделать полем формы?
У меня bars : array[0..10] of TProgressBar; переменная формы

Теперь возник такой вопрос. К прогресбару из таймера я обращаюсь радномно и надо если у ВСЕХ прогресбаров позиция больше или равна 100 произвести определенные действия. Как это красвио написать? Там вроде надо ксор использовать...

И еще (код у меня пока далеко не оптимальный) но всеже хочу понять почему во время выполнения программы возникает ошибка времени выполнения "Access violation at adress 00403414 min module. Read of adress 00A28000"?
Кто может здесь помочь?

Последний раз редактировалось M.A.D.M.A.N., 25.03.2013 в 19:23.
Ответить с цитированием
  #4  
Старый 24.03.2013, 13:21
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от lostbananan
почему во время выполнения программы возникает ошибка времени выполнения "Access violation at adress 00403414 min module. Read of adress 00A28000"?
это из-за ошибки в программе.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 24.03.2013, 13:25
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

AV - доступ к компоненту/переменной/объекту, который отсутствует в памяти. Это может быть, например, выход за границы динамического массива. Посмотри, где появляется эта ошибка, и пройдись по функции (целиком) в отладчике. Там увидишь, где ошибка.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 24.03.2013, 13:26
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

1. В вашем коде на срабатывание таймера совершенно не ясно какой бар вы обрабатываете. Чему равен индекс массива i ?
2. Вот что вы хотели сказать в этой строчке кода?
Код:
if pBar > 11 then
    begin
откуда pBar взялся? Если это внешняя переменная, и она отвечает за текущий бар, то зачем тогда вы его ищете в п.1 ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 24.03.2013, 13:28
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Привет, давно не виделись
Код:
if pb.Position >= 100 then
      inc(pBar);
    if pBar > 11 then
Видимо, pBar отвечает за количество "завершённых" прогрессбаров. Только реализовано криво
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 24.03.2013 в 13:30.
Ответить с цитированием
  #8  
Старый 24.03.2013, 13:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от PhoeniX
Привет, давно не виделись

pb и pBar - разные переменные
Угу, когда отправил сообщение, понял. Потому переправил немного
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 24.03.2013, 13:39
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

ПРИ дебаге, он меня выкидывает в
Код:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
в енд. И как определить где происходит ошибка?

Я нашел какой кусок кода вызывает ошибку:
Код:
Text[4] := TLabel.Create(Form1);
  Text[4].Parent :=Form1;
  Text[4].Caption := 'Áîðãè';
  Text[4].Left := 435;
  Grid[4] := TDrawGrid.Create(Form1);
  Grid[4].Parent := Form1;
  Grid[4].Left := 421;
  Grid[4].RowCount := 1;
  Grid[4].ColCount := 1;
  Grid[4].Enabled := false;
  Grid[4].DefaultColWidth := 100;
  Grid[4].DefaultRowHeight := 6*debts;
  Grid[4].Width := 100;
  Grid[4].Height := 6*debts;
  Grid[4].Top := 600-Grid[4].Height+20;
  Grid[4].ScrollBars := ssNone;
  Grid[4].Tag   := 5;
  Grid[4].OnDrawCell:=DrawGrid1DrawCell;
Но вот что здесь может вызвать ошибку НЕ ПОНИМАЮ!

Последний раз редактировалось M.A.D.M.A.N., 25.03.2013 в 19:24.
Ответить с цитированием
  #10  
Старый 24.03.2013, 18:41
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

В каком методе этот код? И в какой строчке вылетает?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #11  
Старый 24.03.2013, 18:41
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Цитата:
Сообщение от lostbananan
Я нашел какой кусок кода вызывает ошибку:
Код:
Text[4] := TLabel.Create(Form1);
  Text[4].Parent :=Form1;
  Text[4].Caption := 'Борги';
  Text[4].Left := 435;
  Grid[4] := TDrawGrid.Create(Form1);
  Grid[4].Parent := Form1;
  Grid[4].Left := 421;
  Grid[4].RowCount := 1;
  Grid[4].ColCount := 1;
  Grid[4].Enabled := false;
  Grid[4].DefaultColWidth := 100;
  Grid[4].DefaultRowHeight := 6*debts;
  Grid[4].Width := 100;
  Grid[4].Height := 6*debts;
  Grid[4].Top := 600-Grid[4].Height+20;
  Grid[4].ScrollBars := ssNone;
  Grid[4].Tag   := 5;
  Grid[4].OnDrawCell:=DrawGrid1DrawCell;
Но вот что здесь может вызвать ошибку НЕ ПОНИМАЮ!
Причем ошибку вызвает даже только:
Код:
Text[4] := TLabel.Create(Form1);
А вот
Код:
Text[3] := TLabel.Create(Form1);
ошибки не вызывает.
P.S.
Код:
  Grid  : array[0..16] of TDrawGrid;
  Text  : array[0..16] of TLabel;
Помогите, люди добрые!!!
Ответить с цитированием
  #12  
Старый 24.03.2013, 18:48
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Нужно больше кода!
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #13  
Старый 24.03.2013, 18:54
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Вот весь код процедуры:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var

  i, x, y : integer;
  tm : TTimer;
  pb : TProgressBar;
  lb : TLabel;
  Msg:TWMGetMinMaxInfo;
  Grid  : array[0..16] of TDrawGrid;
  Text  : array[0..16] of TLabel;
begin
  i:= 0;// Нове вікно? з "даними тестування" + посил на принтер
  if Timer1<>Nil then
    Timer1.Free;
  for i := 1 to 11 do
  begin
    pb := bars[i-1];
    lb := labels[i-1];
    if pb<>Nil then
    begin
      pb.Visible := false;
      pb.Free;
      lb.Free;
    end;
  end;
  x := screen.Width;
  y := screen.Height;
  Form1.Left := (x-1168) div 2;
  Form1.Top := y-800;
  Form1.Width := 1170;
  Button1.Free;
  Height := 700;


  // Агресія
  Text[0] := TLabel.Create(Form1);
  Text[0].Parent :=Form1;
  Text[0].Caption := 'Агресія';
  Text[0].Left := 30;
  Grid[0] := TDrawGrid.Create(Form1);
  Grid[0].Tag := 1;
  Grid[0].Parent := Form1;
  Grid[0].Height := 6*agres;
  Grid[0].Left := 1;
  Grid[0].Top := Grid[0].Height - 600+20;
  Grid[0].RowCount := 1;
  Grid[0].ColCount := 1;
  Grid[0].Enabled := false;
  Grid[0].DefaultColWidth := 100;
  Grid[0].DefaultRowHeight := 6*agres;
  Grid[0].Width := 100;
  Grid[0].ScrollBars := ssNone;
  Grid[0].OnDrawCell:=DrawGrid1DrawCell;
// Алкоголь
  Text[1] := TLabel.Create(Form1);
  Text[1].Parent :=Form1;
  Text[1].Caption := 'Алкоголь';
  Text[1].Left := 130;
  Grid[1] := TDrawGrid.Create(Form1);
  Grid[1].Parent := Form1;
  Grid[1].Left := 106;
  Grid[1].Tag := 2;
  Grid[1].RowCount := 1;
  Grid[1].ColCount := 1;
  Grid[1].Enabled := false;
  Grid[1].DefaultColWidth := 100;
  Grid[1].DefaultRowHeight := 6*alcohol;
  Grid[1].Width := 100;
  Grid[1].Height := 6*alcohol;
  Grid[1].Top := 600-6*alcohol + 20;
  Grid[1].ScrollBars := ssNone;
  Grid[1].OnDrawCell:=DrawGrid1DrawCell;
// Алкоголь
  Text[2] := TLabel.Create(Form1);
  Text[2].Parent :=Form1;
  Text[2].Caption := 'Шеф';
  Text[2].Left := 250;
  Grid[2] := TDrawGrid.Create(Form1);
  Grid[2].Parent := Form1;
  Grid[2].Left := 211;
  Grid[2].RowCount := 1;
  Grid[2].ColCount := 1;
  Grid[2].Enabled := false;
  Grid[2].DefaultColWidth := 100;
  Grid[2].DefaultRowHeight := 6*boss;
  Grid[2].Width := 100;
  Grid[2].Height := 6*boss;
  Grid[2].Top := 600-Grid[2].Height+20;
  Grid[2].ScrollBars := ssNone;
  Grid[2].Tag   := 3;
  Grid[2].OnDrawCell:=DrawGrid1DrawCell;
  // Депресія
  Text[3] := TLabel.Create(Form1);
  Text[3].Parent :=Form1;
  Text[3].Caption := 'Депресія';
  Text[3].Left := 345;
  Grid[3] := TDrawGrid.Create(Form1);
  Grid[3].Parent := Form1;
  Grid[3].Left := 316;
  Grid[3].RowCount := 1;
  Grid[3].ColCount := 1;
  Grid[3].Enabled := false;
  Grid[3].DefaultColWidth := 100;
  Grid[3].DefaultRowHeight := 6*depression;
  Grid[3].Width := 100;
  Grid[3].Height := 6*depression;
  Grid[3].Top := 600-Grid[3].Height+20;
  Grid[3].ScrollBars := ssNone;
  Grid[3].Tag   := 4;
  Grid[3].OnDrawCell:=DrawGrid1DrawCell;
  // Борги
  Text[4] := TLabel.Create(Form1);
  Text[4].Parent :=Form1;
  Text[4].Caption := 'Борги';
  Text[4].Left := 435;
  Grid[4] := TDrawGrid.Create(Form1);
  Grid[4].Parent := Form1;
  Grid[4].Left := 421;
  Grid[4].RowCount := 1;
  Grid[4].ColCount := 1;
  Grid[4].Enabled := false;
  Grid[4].DefaultColWidth := 100;
  Grid[4].DefaultRowHeight := 6*debts;
  Grid[4].Width := 100;
  Grid[4].Height := 6*debts;
  Grid[4].Top := 600-Grid[4].Height+20;
  Grid[4].ScrollBars := ssNone;
  Grid[4].Tag   := 5;
  Grid[4].OnDrawCell:=DrawGrid1DrawCell;
  // Зарплата
  Text[5] := TLabel.Create(Form1);
  Text[5].Parent :=Form1;
  Text[5].Caption := 'Зарплата';
  Text[5].Left := 540;
  Grid[5] := TDrawGrid.Create(Form1);
  Grid[5].Parent := Form1;
  Grid[5].Left := 526;
  Grid[5].RowCount := 1;
  Grid[5].ColCount := 1;
  Grid[5].Enabled := false;
  Grid[5].DefaultColWidth := 100;
  Grid[5].DefaultRowHeight := 6*salary;
  Grid[5].Width := 100;
  Grid[5].Height := 6*salary;
  Grid[5].Top := 600-Grid[5].Height+20;
  Grid[5].ScrollBars := ssNone;
  Grid[5].Tag   := 6;
  Grid[5].OnDrawCell:=DrawGrid1DrawCell;
  // Інформація
  Text[6] := TLabel.Create(Form1);
  Text[6].Parent :=Form1;
  Text[6].Caption := 'Інформація';
  Text[6].Left := 630;
  Grid[6] := TDrawGrid.Create(Form1);
  Grid[6].Parent := Form1;
  Grid[6].Left := 631;
  Grid[6].RowCount := 1;
  Grid[6].ColCount := 1;
  Grid[6].Enabled := false;
  Grid[6].DefaultColWidth := 100;
  Grid[6].DefaultRowHeight := 6*information;
  Grid[6].Width := 100;
  Grid[6].Height := 6*information;
  Grid[6].Top := 600-Grid[6].Height+20;
  Grid[6].ScrollBars := ssNone;
  Grid[6].Tag   := 7;
  Grid[6].OnDrawCell:=DrawGrid1DrawCell;
  // Лідер
  Text[7] := TLabel.Create(Form1);
  Text[7].Parent :=Form1;
  Text[7].Caption := 'Лідер';
  Text[7].Left := 738;
  Grid[7] := TDrawGrid.Create(Form1);
  Grid[7].Parent := Form1;
  Grid[7].Left := 736;
  Grid[7].RowCount := 1;
  Grid[7].ColCount := 1;
  Grid[7].Enabled := false;
  Grid[7].DefaultColWidth := 100;
  Grid[7].DefaultRowHeight := 6*leader;
  Grid[7].Width := 100;
  Grid[7].Height := 6*leader;
  Grid[7].Top := 600-Grid[7].Height+20;
  Grid[7].ScrollBars := ssNone;
  Grid[7].Tag   := 8;
  Grid[7].OnDrawCell:=DrawGrid1DrawCell;
  // Статус
  Text[8] := TLabel.Create(Form1);
  Text[8].Parent :=Form1;
  Text[8].Caption := 'Статус';
  Text[8].Left := 830;
  Grid[8] := TDrawGrid.Create(Form1);
  Grid[8].Parent := Form1;
  Grid[8].Left := 841;
  Grid[8].RowCount := 1;
  Grid[8].ColCount := 1;
  Grid[8].Enabled := false;
  Grid[8].DefaultColWidth := 100;
  Grid[8].DefaultRowHeight := 6*status;
  Grid[8].Width := 100;
  Grid[8].Height := 6*status;
  Grid[8].Top := 600-Grid[8].Height+20;
  Grid[8].ScrollBars := ssNone;
  Grid[8].Tag   := 9;
  Grid[8].OnDrawCell:=DrawGrid1DrawCell;
  // Наркотики
  Text[9] := TLabel.Create(Form1);
  Text[9].Parent :=Form1;
  Text[9].Caption := 'Наркотики';
  Text[9].Left := 950;
  Grid[9] := TDrawGrid.Create(Form1);
  Grid[9].Parent := Form1;
  Grid[9].Left := 946;
  Grid[9].RowCount := 1;
  Grid[9].ColCount := 1;
  Grid[9].Enabled := false;
  Grid[9].DefaultColWidth := 100;
  Grid[9].DefaultRowHeight := 6*drugs;
  Grid[9].Width := 100;
  Grid[9].Height := 6*drugs;
  Grid[9].Top := 600-Grid[9].Height+20;
  Grid[9].ScrollBars := ssNone;
  Grid[9].Tag   := 10;
  Grid[9].OnDrawCell:=DrawGrid1DrawCell;

  // Звільнення
  Text[10] := TLabel.Create(Form1);
  Text[10].Parent :=Form1;
  Text[10].Caption := 'Звільнення';
  Text[10].Left := 1060;
  Grid[10] := TDrawGrid.Create(Form1);
  Grid[10].Parent := Form1;
  Grid[10].Left := 1051;
  Grid[10].RowCount := 1;
  Grid[10].ColCount := 1;
  Grid[10].Enabled := false;
  Grid[10].DefaultColWidth := 100;
  Grid[10].DefaultRowHeight := 6*dismissal;
  Grid[10].Width := 100;
  Grid[10].Height := 6*dismissal;
  Grid[10].Top := 600-Grid[10].Height+20;
  Grid[10].ScrollBars := ssNone;
  Grid[10].Tag   := 11;
  Grid[10].OnDrawCell:=DrawGrid1DrawCell;


  Button2.Left  := (Form1.Width-Button2.Width) DIV 2;
  Button2.Top := 630;
  Button2.Visible := true;
end;
Причем когда запустил такой кусок кода:
Код:
  for i:=0 to 16 do
  begin
    Text[i] := TLabel.Create(Form1);
  end;
Тоже вызывает ошибку, а когда такой:
Код:
  for i:=0 to 16 do
  begin
    ShowMessage(IntToStr(i));
    Text[i] := TLabel.Create(Form1);
  end;
Ошибки нет! В чем здесь ляп????

Последний раз редактировалось lostbananan, 24.03.2013 в 19:02.
Ответить с цитированием
  #14  
Старый 25.03.2013, 07:24
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от lostbananan
...когда запустил такой кусок кода:
Код:
  for i:=0 to 16 do
  begin
    Text[i] := TLabel.Create(Form1);
  end;
Тоже вызывает ошибку, а когда такой:
Код:
  for i:=0 to 16 do
  begin
    ShowMessage(IntToStr(i));
    Text[i] := TLabel.Create(Form1);
  end;
Ошибки нет! В чем здесь ляп????
Вроде здесь не ляп, у меня есть подозрение что ты своими "обширными" сборками банально грузишь машинку и она не успевает "шевелиться", а с отдыхом, ввиде шоумессаги, успевает. Application.ProcessMessages должон помочь.
Ответить с цитированием
  #15  
Старый 25.03.2013, 09:23
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Вставил в код:
Код:
  for i:=0 to 16 do
begin
  Application.ProcessMessages;
  Text[i] := TLabel.Create(Form1);
  Application.ProcessMessages;
end;

Application.ProcessMessages; НИЧЕГО НЕ ВЫДАЕТ!
А ошибка времени исполнения осталасб. Что делать может кто с подобным стыкался?

Помогите! Я уже совсем зациклился.
Код
Код:
  for i:=0 to 16 do
begin
  ShowMessage(IntToStr(i));
  Text[i] := TLabel.Create(Form1);
end;
  ShowMessage('Після циклу');
После выаолнения ShowMessage('Після циклу'); возникает ошибка времени выполнения...
Что за мистика в чем проблема может кто подскажет!!!

Последний раз редактировалось M.A.D.M.A.N., 25.03.2013 в 19:23.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter