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

Delphi Sources



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

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

Возник вопрос: где (в каком свойстве) у TDrawGrid цвет заливка ячейки?
И еще, приложение мое готово уже почти на 99%, в приложении в рантйм режиме создаются 11 TDrawGrid-ов и 11 TLabel-ов, иногди показывает аксес виолатион. Если в дебаг нажать F7 - приложение после показа диалога с этим самым аксес виолатион (попытка чтения) - приложение нормально работает. Что это может быть такое и как с этим багом бороться?
Ответить с цитированием
  #2  
Старый 09.03.2013, 12:39
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

"Заливка" цветом осуществляется в событии OnDrawCell.
По ошибке: нужно видеть код.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 09.03.2013, 16:30
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
  // Íîâå â³êíî? ç "äàíèìè òåñòóâàííÿ" + ïîñèë íà ïðèíòåð
  if Timer1<>Nil then
    Timer1.Free;
  for i := 1 to 11 do
  begin
    pb := TProgressBar(FindComponent('ProgressBar' + IntToStr(i)));
    if pb<>Nil then
    begin
      pb.Visible := false;
      pb.Free;
    end;
    lb := TLabel(FindComponent('Label' + IntToStr(i)));
    if lb<>Nil then
      lb.Destroy;
  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;
Ответить с цитированием
  #4  
Старый 09.03.2013, 16:36
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Копец китайский код, можно раз в 10 сократить
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 09.03.2013, 16:47
lostbananan lostbananan вне форума
Начинающий
 
Регистрация: 05.01.2013
Сообщения: 119
Репутация: 10
По умолчанию

Как это можно сократить?
и как залить ячейку?
Написал такой код:
Код:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var s : String;
begin
  case TDrawGrid(Sender).tag of
    1:  begin
          Grid[0].Canvas.Brush.Color := clRed;
При этом заливается фон под текстом а не вся ячейка.
Как залить всю ячейку?
Как залить всю ячейку нрашел:
Код:
Grid[0].Canvas.Brush.Color := clRed;
Grid[0].Canvas.FillRect(Rect);
Буду благодарен за подсказку по скоращению приведенного кода, но, самое главное - почему данный код вызывает ошибку времени исполнения??
И ещзе один вопрос : нужен оператор выбора, но оператор выбора не работает с дробными числами... Как привести Real в Integr или как "обмануть" оператор case?

Последний раз редактировалось lostbananan, 09.03.2013 в 17:04.
Ответить с цитированием
  #6  
Старый 09.03.2013, 17:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Первое что бросилось в глаза
Код:
  lb.Destroy; 
так нельзя делать, нужно так
Код:
  lb.Free; 
далее, все создания можно заключить в один цикл.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
lostbananan (09.03.2013)
  #7  
Старый 09.03.2013, 17:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от lostbananan
Как это можно сократить?...
Цикл "выращивания" 11-ти лейблов
Код:
...
  var
  Cap: array [0..10] of string=
  ('lb0','lb1','lb2','lb3','lb4','lb5','lb6','lb7','lb8','lb9','lb10');
  Lft: array [0..10] of integer=
   (30, 130, 250, 345, 435, 540, 630, 738, 830, 950, 1060);

...

  for i:=0 to 10 do
  begin
  Text[i]:= TLabel.Create(Form1);
  Text[i].Parent:=Form1;
  Text[i].Caption:= Cap[i];
  Text[i].Left:= Lft[i]; ;
  end;
...
гриды можно создавать аналогично

Последний раз редактировалось Alegun, 09.03.2013 в 18:19.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
lostbananan (09.03.2013)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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