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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 13:38   #1
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию Закрашивание в StringGrid

Всем привет! Нужно дорешать задачу по Delphi. А вот и она сама!

Дана целочисленная матрица {Aij} i=1..n, j=1..m (n,mє(6..11)). Конкретный размер задается списками ComboBox. Занесение исходных компонентов в матрицу осуществляется с помощью StringGrid. Элементы матрицы формируются генератором случайных чисел в диапазоне -100..100. Занесение исходных значений в матрицу производится по двойному щелчку мыши. По команде главного меню столбцы с одинаковым количеством положительных и отрицательных элементов выделяются разноцветными рамками. Пароль: на экране появляются восемь случайных цифр, в ответ надо ввести разность второй и пятой. Трехкратный неправильный ввод пароля приводит к выходу из программы.

В общем я её почти решил. Осталось только сделать так, чтобы по команде главного меню столбцы с одинаковым количеством положительных и отрицательных элементов выделяются разноцветными рамками. Этого я не знаю как сделать.
А вот сам листинг программы, что я сделал! Unit1 я показывать не буду. Я его сделал. Осталось длделать Unit2. (сообщение может быть не больше 5000 символов, а у меня получаеься больше.) Весь код во вложении

Unit2

Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  application.Terminate;
end;

procedure TForm2.ComboBox1Click(Sender: TObject);
begin
  Case Combobox1.ItemIndex of
    0:  begin
          StringGrid1.ColCount:=7;
        end;
    1:  begin
          StringGrid1.ColCount:=8;
        end;
    2:  begin
          StringGrid1.ColCount:=9;
        end;
    3:  begin
          StringGrid1.ColCount:=10;
        end;
    4:  begin
          StringGrid1.ColCount:=11;
        end;
    5:  begin
          StringGrid1.ColCount:=12;
        end;
  end;
end;

procedure TForm2.ComboBox2Click(Sender: TObject);
begin
  Case Combobox2.ItemIndex of
    0:  begin
          StringGrid1.RowCount:=7;
        end;
    1:  begin
          StringGrid1.RowCount:=8;
        end;
    2:  begin
          StringGrid1.RowCount:=9;
        end;
    3:  begin
          StringGrid1.RowCount:=10;
        end;
    4:  begin
          StringGrid1.RowCount:=11;
        end;
    5:  begin
          StringGrid1.RowCount:=12;
        end;
  end;
end;

procedure TForm2.StringGrid1DblClick(Sender: TObject);
begin
for i:=form2.StringGrid1.FixedRows to form2.StringGrid1.RowCount-1 do
    begin
      for j := form2.StringGrid1.FixedCols to form2.StringGrid1.ColCount-1 do
          begin
            form2.StringGrid1.Cells[j, i] := IntToStr( Random(200)-100);
          end;
    end;
end;

procedure TForm2.FormActivate(Sender: TObject);
begin
form2.StringGrid1.Cells[0,0]:='Матрица';
form2.StringGrid1.Cells[0,1]:='A11';
form2.StringGrid1.Cells[0,2]:='A21';
form2.StringGrid1.Cells[0,3]:='A31';
form2.StringGrid1.Cells[0,4]:='A41';
form2.StringGrid1.Cells[0,5]:='A51';
form2.StringGrid1.Cells[0,6]:='A61';
form2.StringGrid1.Cells[0,7]:='A71';
form2.StringGrid1.Cells[0,8]:='A81';
form2.StringGrid1.Cells[0,9]:='A91';
form2.StringGrid1.Cells[0,10]:='A101';
form2.StringGrid1.Cells[0,11]:='A111';
form2.StringGrid1.Cells[1,0]:='A11';
form2.StringGrid1.Cells[2,0]:='A12';
form2.StringGrid1.Cells[3,0]:='A13';
form2.StringGrid1.Cells[4,0]:='A14';
form2.StringGrid1.Cells[5,0]:='A15';
form2.StringGrid1.Cells[6,0]:='A16';
form2.StringGrid1.Cells[7,0]:='A17';
form2.StringGrid1.Cells[8,0]:='A18';
form2.StringGrid1.Cells[9,0]:='A19';
form2.StringGrid1.Cells[10,0]:='A110';
form2.StringGrid1.Cells[11,0]:='A111';
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  application.Terminate;
end;

end.

Вот сам проект! Помогите, если я решу эту задачу, мне поставят экзамен автоматом.
Вложения
Тип файла: zip kr.zip (263.2 Кб, 13 просмотров)

Последний раз редактировалось StudentMarat; 28.03.2010 в 13:42.
StudentMarat вне форума Ответить с цитированием
Старый 28.03.2010, 14:30   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Для окрашивания строк таблицы используй
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 28.03.2010, 14:35   #3
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

А код скажи плз.! Я никак не могу!
StudentMarat вне форума Ответить с цитированием
Старый 28.03.2010, 15:26   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Вот пример, но он для TListBox
Код:
procedure TForm1.UsersListBoxDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
try
With UsersListBox DO
 Begin
   // Выделение
    // полоски
 if (Index mod 2)=0 then
  Canvas.brush.Color := $00EFD3C6
 else
  Canvas.brush.Color := clWhite;
 Canvas.FillRect(Rect);
    // выделенное
   Canvas.Brush.Color := $00C66931;
  If (odSelected in State) then
   Canvas.FillRect(Rect);
   // Текст + выравнивание + прозрачность фона
  SetBKMode(Canvas.Handle, TRANSPARENT);
  Canvas.Font.Color := clBlack;
  Canvas.TextOut((Rect.Right-Canvas.TextWidth(Items.Strings[Index]) - 1) div 2,
                  Rect.Top,
                  Items.Strings[Index]
                 );
// картинки
    // слева

  ImageList1.Draw(usersListBox.Canvas,Rect.Left,Rect.top,0);
end;
except
end;
end;
psycho-coder вне форума Ответить с цитированием
Старый 28.03.2010, 15:26   #5
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Ну неужели больше никто ничего не знает
StudentMarat вне форума Ответить с цитированием
Старый 28.03.2010, 15:30   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от StudentMarat Посмотреть сообщение
Ну неужели больше никто ничего не знает
Предыдущий пост
psycho-coder вне форума Ответить с цитированием
Старый 28.03.2010, 15:35   #7
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Вот пример, но он для TListBox
Код:
procedure TForm1.UsersListBoxDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
try
With UsersListBox DO
 Begin
   // Выделение
    // полоски
 if (Index mod 2)=0 then
  Canvas.brush.Color := $00EFD3C6
 else
  Canvas.brush.Color := clWhite;
 Canvas.FillRect(Rect);
    // выделенное
   Canvas.Brush.Color := $00C66931;
  If (odSelected in State) then
   Canvas.FillRect(Rect);
   // Текст + выравнивание + прозрачность фона
  SetBKMode(Canvas.Handle, TRANSPARENT);
  Canvas.Font.Color := clBlack;
  Canvas.TextOut((Rect.Right-Canvas.TextWidth(Items.Strings[Index]) - 1) div 2,
                  Rect.Top,
                  Items.Strings[Index]
                 );
// картинки
    // слева

  ImageList1.Draw(usersListBox.Canvas,Rect.Left,Rect.top,0);
end;
except
end;
end;
Я понять не могу, а что он собственно делает!!??
StudentMarat вне форума Ответить с цитированием
Старый 28.03.2010, 15:53   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Меняет цвет строк через одну
psycho-coder вне форума Ответить с цитированием
Старый 28.03.2010, 15:55   #9
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

А мой пример доделать не сможешь!
StudentMarat вне форума Ответить с цитированием
Старый 28.03.2010, 16:05   #10
Sanakan
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 47
По умолчанию

Нужно закрасить столбец или выделить рамкой?
Sanakan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нестандартное закрашивание DBGrid Kisma БД в Delphi 4 16.02.2010 21:26
StringGrid stp56 Общие вопросы Delphi 4 27.07.2009 20:44
Закрашивание ячеек в StringGrid ИВэТэшка Помощь студентам 7 12.04.2009 11:09
Закрашивание столбцов в Stringgrid ertar Общие вопросы Delphi 3 19.02.2009 00:31
StringGrid: Выделение и закрашивание mazdakilla Общие вопросы Delphi 1 14.05.2008 22:55