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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 10:32   #1
JK0
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 26
По умолчанию запретить редактирование в отдельных ячейках Stringgrid Delphi

Подскажите, как установить свойство goEditing в false только для отдельных ячеек Stringgrid?
Варианты типа stringgrid1.Cells[i,j].Options... или
stringgrid1.Options.Cells[i,j]... не пропускает компилятор
JK0 вне форума Ответить с цитированием
Старый 07.12.2010, 11:04   #2
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

procedure TForm1.StringGridSelectCell(Sender: TObject; ACol, ARow: Longint; var CanSelect: Boolean);
begin
if(ARow=#)and(ACol=#) then
StringGrid.Options:=StringGrid.Opti ons-[goEditing]
else StringGrid.Options:=StringGrid.Opti ons+[goEditing];
end;

# - номер

Последний раз редактировалось wm_leviathan; 07.12.2010 в 11:09.
wm_leviathan вне форума Ответить с цитированием
Старый 07.12.2010, 11:24   #3
JK0
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 26
По умолчанию

Спасибо!
Для статического stringgrid всё работает, а второй у меня динамический - для него не реагирует (описание процедуры в заголовке есть, проект запускается, а реакции - ноль).
JK0 вне форума Ответить с цитированием
Старый 07.12.2010, 11:33   #4
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

можно привести код динамического создания StringGrid'a как вы его создаете?
wm_leviathan вне форума Ответить с цитированием
Старый 07.12.2010, 11:35   #5
JK0
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 26
По умолчанию

Код:
if a<>nil then a.Destroy;

a:=Tstringgrid.Create(Form1);
a.Parent:=Form1;
a.ColCount:=na+1;
a.RowCount:=nk+1;
a.Height:=stringgrid1.Height+26;     //
a.Top:=580;
a.FixedColor:=clInactiveCaptionText;
a.DefaultColWidth:=stringgrid1.DefaultColWidth;
a.DefaultRowHeight:=stringgrid1.DefaultRowHeight;
a.Visible:=true;
a.Options:= a.Options+[goEditing];
может процедура описана некорректно:

Код:
procedure TForm1.aSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean; i:integer);
begin
if ACol=1 then
a.Options:=a.Options-[goEditing]
else a.Options:=a.Options+[goEditing];
end;

Последний раз редактировалось Stilet; 07.12.2010 в 11:51.
JK0 вне форума Ответить с цитированием
Старый 07.12.2010, 12:28   #6
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

а вы привязку событий наверно не сделали

Код:
sg.OnSelectCell:=form2.sgSelectCell;
вот полный пример моего листенга (на форме 1 кнопка button1)
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
  procedure sgSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);//объявляем свою процедуру в privat секции
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
 var sg: TStringGrid;
begin
sg:= TStringGrid.Create(Form2);//создаем стринггрид
sg.Parent:=Form2;
sg.Width:=417;
sg.Height:=169;
sg.Options:= sg.Options+[goEditing];
sg.OnSelectCell:=form2.sgSelectCell;//привязка события к нашей процедуре
end;

procedure TForm2.sgSelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean);

begin
if(ARow=1)and(ACol=1) then //тут уже работает наша процедура
(Sender as TStringGrid).Options:=(Sender as TStringGrid).Options-[goEditing]
else
(Sender as TStringGrid).Options:=(Sender as TStringGrid).Options+[goEditing];
end;

end.
wm_leviathan вне форума Ответить с цитированием
Старый 07.12.2010, 12:43   #7
JK0
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 26
По умолчанию

Спасибо огромнейшее!
Всё работает!

Последний раз редактировалось JK0; 07.12.2010 в 12:49.
JK0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно запретить редактирование ячейки в DBGrid kraw2 Компоненты Delphi 8 25.11.2010 21:16
Выравнивание данных в ячейках StringGrid Александр Маркелов Помощь студентам 8 24.06.2010 16:15
Как запретить в Екселе что-либо писать в ячейках? Гошик Microsoft Office Excel 6 14.05.2010 00:49
Запретить редактирование в DBGrid MixanMM БД в Delphi 12 10.05.2010 20:28
Можно ли файл в MS Exel запретить редактирование? jewller Microsoft Office Excel 6 05.02.2009 00:03