Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
3030 / 1916 / 1649
Регистрация: 30.04.2011
Сообщений: 3,060
1

Сделать главную диагональ StringGrid недоступной для редактирования

17.12.2012, 20:13. Показов 2467. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо, чтобы главная диагональ StringGrid'а была недоступной для редактирования, а остальная часть - доступной. Возможно ли это? Если да, подскажите пожалуйста. Благодарю заранее.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2012, 20:13
Ответы с готовыми решениями:

Сделать кнопку недоступной, если все поля в stringgrid не заполнены
привет..как сделать если все поля в stringgrid не заполнены то кнопка не работает?

Как сделать так, чтобы циклы не трогали главную диагональ?
Набросал кое как и ничего не вышло. Подскажите пожалуйста procedure TForm1.Button1Click(Sender:...

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы...

Заполнить главную диагональ числами от 1 до m
Помогите пожалуйста с заданием. Нужно вывести массив в Label заполненный нулями и главная диагональ...

9
249 / 154 / 31
Регистрация: 07.10.2012
Сообщений: 401
18.12.2012, 12:12 2
В событии OnSelectCell
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  if ACol = ARow then 
    StringGrid1.Options := StringGrid1.Options - [goEditing];
  else
    StringGrid1.Options := StringGrid1.Options + [goEditing]
end;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.12.2012, 12:22 3
Проще выделить все элементы главной диагонали другим цветом (скажем, серым) и вообще не давать выбирать ячейку, чем все время дергать опции туда-сюда:
Delphi
1
2
3
4
5
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
   CanSelect := (ACol <> ARow);
end;
, а то пользователь начнет спрашивать, а чего это, я не могу редактировать? А так - нет выбора - нет вопросов
1
3030 / 1916 / 1649
Регистрация: 30.04.2011
Сообщений: 3,060
18.12.2012, 18:59  [ТС] 4
DaMortum, UI, прошу прощения, но я не посчитал нужным сказать, что StringGrid создается программно после нажатия на кнопку. Я вот пробовал, но запихнуть ваш код никак не получается, ибо не знаю как после нажатия на кнопку изменить событие OnSelectCell
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.12.2012, 19:33 5
Цитата Сообщение от Kodzaev Посмотреть сообщение
StringGrid создается программно после нажатия на кнопку
И что?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
type
  TForm1 = class(TForm)
    // ...
  private
    { Private declarations }
    // Добавляем описание приватного метода
    procedure MySelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  public
    { Public declarations }
  end;
 
// ...
 
// Его реализацию
procedure TForm1.MySelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
   CanSelect := (ACol <> ARow);
end;
 
// Создание грида
procedure TForm1.Button5Click(Sender: TObject);
var sg : TStringGrid;
begin
   sg := TStringGrid.Create(Self);
   sg.Parent := Self;
   sg.ColCount := 10;
   sg.RowCount := 10;
   sg.Width := 300;
   sg.Height := 300;
   sg.DefaultColWidth := 35;
   sg.DefaultRowHeight := 35;
   sg.Options := [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing];
 
   sg.OnSelectCell := MySelectCell; // Вот он, обработчик
end;
2
3030 / 1916 / 1649
Регистрация: 30.04.2011
Сообщений: 3,060
19.12.2012, 18:19  [ТС] 6
UI, а как сделать так, чтобы все ячейки ниже главной диагонали а также саму диагональ сделать недоступными и серого цвета?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
19.12.2012, 18:38 7
Написать аналогично предыдущему обработчик:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Не забудь объявить в классе формы
procedure TForm1.MyDrawCell(Sender: TObject; ACol, ARow: Integer;
   Rect: TRect; State: TGridDrawState);
begin
   with Sender as TStringGrid do
   begin
      if ACol <= ARow then
         Canvas.Brush.Color := clDkGray
      else
         Canvas.Brush.Color := clWindow;
 
      if (ACol >= FixedCols) and (ARow >= FixedRows) then
      begin
         Canvas.FillRect(Rect);
         Canvas.TextOut(Rect.Left, Rect.Top, Cells[ACol, ARow]);
      end;
   end;
end;
, и назначить его тоже при создании грида:
Delphi
1
2
   sg.OnSelectCell := MySelectCell;
   sg.OnDrawCell := MyDrawCell; // <--- Вот так
1
3030 / 1916 / 1649
Регистрация: 30.04.2011
Сообщений: 3,060
19.12.2012, 18:53  [ТС] 8
UI, а как сделать их недоступными для редактирования?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
19.12.2012, 18:57 9
А, я забыл скопировать. Вот так меняешь обработчик MySelectCell:
Delphi
1
2
3
4
5
procedure TForm1.MySelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
   CanSelect := (ACol > ARow);
end;
1
3030 / 1916 / 1649
Регистрация: 30.04.2011
Сообщений: 3,060
19.12.2012, 18:57  [ТС] 10
А, все, разобрался...
0
19.12.2012, 18:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2012, 18:57
Помогаю со студенческими работами здесь

Массив: Показывает только главную диагональ
Показывает только главную диагональ,В чем ошибка? procedure TForm1.Button1Click(Sender: TObject);...

Нахождения максимального числа в столбце и перемещение его на главную диагональ
Доброго время суток люди я бы даже сказал человеки, помогите, программа работает меня больше...

Матрица: найти сумму нижнего треугольника включая главную диагональ
Можете написать часть кода, где находится сумма нижнего треугольника включая главную диагональ?

ComboBox в StringGrid. Как сделать выпадающее меню недоступным для редактирования?
Добавил в ValueListEditor функцию выпадающего меню для второй колонки, делал по образу и подобию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru