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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2012, 20:30   #1
waka2ebawer
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 46
По умолчанию загрузка из ListBox в StringGrid

Добрый вечер. есть компонент ListBox в нем находятся числа и есть компонент StringGrid, в котором отображается календарь. и есть кнопка, при нажатии на которую происходит цикл

Код:
global var n:integer;
Код:
var i,x,y:integer;
begin
for i:=0 to 10 do begin
  n:=StrToInt(Listbox1.Items.Strings[i]); end;
   for y:=1 to 7 do
    for x:=0 to 6 do
     begin StringGrid1.Cells[x,y]:=calendar.CellText[x,y]; 
      end;
и есть событие в StringGrid

Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if StringGrid1.Cells[ACol,ARow]<>'' then
    begin
     if StrToInt(StringGrid1.Cells[ACol,ARow])=n then
      begin
       StringGrid1.Canvas.Brush.Color:=clGreen;
       StringGrid1.Canvas.FillRect(Rect);
       StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[Acol,Arow]);
      end;
суть такая при нажатии на кнопку цикл сканирует listbox и потом сравнивает со stringgrid'ом и если числа совпадают то они закрашиваются цветом. у меня же проблема в том, что он закрашивает только последнее число из listbox'a проходя весь цикл.

Вопрос:как сделать чтобы он все закрашивал, которые есть в listBox'e.
waka2ebawer вне форума Ответить с цитированием
Старый 21.08.2012, 22:02   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Если числа в листбоксе в пределах от 0 до 255 то можно через сет. Примерно так:
Код:
global var n: set of byte;

var i,x,y:integer;
begin
n := [];
for i:=0 to Listbox1.Items.Count - 1 do 
  include(n, StrToInt(Listbox1.Items.Strings[i]));
...
if StrToInt(StringGrid1.Cells[ACol,ARow]) in n then
Ну а вообще такую задачу стоит решать через дополнительные данные(массивы, или флаги на ячейки), ведь очевидно же, что в один момент времени (отрисовка грида) n может иметь только 1 значение. И цикл тут ни при чем, цикл выполняется в одно время, а отрисовка в другое(ну они конечно неким образом связаны между собой,но надеятся на непостоянную вещь нельзя, ибо там ещё много всего всего, в том числе и и перерисовка предыдущих ячеек, что затирает предыдущее нарисованное)
phomm вне форума Ответить с цитированием
Старый 21.08.2012, 22:07   #3
waka2ebawer
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Если числа в листбоксе в пределах от 0 до 255 то можно через сет. Примерно так:
Код:
global var n: set of byte;

var i,x,y:integer;
begin
n := [];
for i:=0 to Listbox1.Items.Count - 1 do 
  include(n, StrToInt(Listbox1.Items.Strings[i]));
...
if StrToInt(StringGrid1.Cells[ACol,ARow]) in n then
Ну а вообще такую задачу стоит решать через дополнительные данные(массивы, или флаги на ячейки), ведь очевидно же, что в один момент времени (отрисовка грида) n может иметь только 1 значение. И цикл тут ни при чем, цикл выполняется в одно время, а отрисовка в другое(ну они конечно неким образом связаны между собой,но надеятся на непостоянную вещь нельзя, ибо там ещё много всего всего, в том числе и и перерисовка предыдущих ячеек, что затирает предыдущее нарисованное)
нашел немного другой способ решения

заменить
Код:
StrToInt(StringGrid1.Cells[ACol,ARow])=n
на

Код:
Listbox1.Items.IndexOf(StringGrid1.Cells[ACol,ARow])>=0
waka2ebawer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка в ListBox и интегрированный WMP Elementery Компоненты Delphi 25 10.06.2010 19:58
Загрузка file.txt в ListBox Shift-stels Общие вопросы C/C++ 1 29.04.2010 21:59
Загрузка списка в ListBox aval Microsoft Office Excel 4 09.06.2009 11:14
Загрузка списка в ListBox reyn90 Помощь студентам 2 31.05.2009 04:17
Сохранение и загрузка строк из listbox Anfall Компоненты Delphi 4 12.05.2009 13:52