Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработчик события для компонента созданного в RunTime. [D7, XP]


allucard ©   (2007-05-08 12:49:00) 

Доброго дня.

У меня два вопроса.

1. Есть компонент TDataSource связанный с DBGrid,  мне нужно после ввода значения в 3,4,5 или 6-й столбец проверить соответствует ли он числу в диапазоне от 1 до 8, и если нет то вернуть фокус DBrid.
Как это сделать, ведь всё создаётся в Run-time?

2. Хотелось бы конечно чтоб проверкой занимался только DBGrid, каой метод лучше переписать? Key press? Как это сделать в Runtime?

Спасибо.


allucard   (2007-05-10 10:39:00) [1]


> Anatoly Podgoretsky ©   (10.05.07 10:14) [11]
>{RASkov} ©   (10.05.07 10:21) [12]


С параметрами разобрался.

BeforePost это хорошо.
Но я лично считаю что проще не дать ввести пользователю непревильное значение вообще, ещё в DBGrid.

Сделал так:

procedure TForm2.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (DBGrid1.SelectedField.AsInteger in [0, 1, 2, 3, 4, 5, 6, 7, 8]) then
 begin
  ShowMessage('Введите число от 0 до 8');
  if ClientDataSet1.State in [dsEdit, dsInsert] then
    begin
      if DBGrid1.SelectedField.AsInteger > 8 then DBGrid1.SelectedField.AsInteger := 8
      else
      if DBGrid1.SelectedField.AsInteger < 0 then DBGrid1.SelectedField.AsInteger := 0
      else
      ClientDataSet1.Post;
    end;
 end;
end;


Всем спасибо.


ЮЮ   (2007-05-10 10:27:00) [2]

Открыть справку
property BeforePost: TDataSetNotifyEvent;
type TDataSetNotifyEvent = procedure( DataSet: TDataSet) of object;
потом сравнить со списком параметров в твоём методе и искоренить глобальное отличие.


{RASkov}   (2007-05-10 10:21:00) [3]

> [10] allucard   (10.05.07 10:06)
> ClientDataSet1 := TClientDataSet.Create(Self);
.........
> DataSource := TDataSource.Create(self);

А в чем необходимость создание этой всей лабуды в рантайме? Почему бы их не бросить на форму и настроить все в ИО?
Про параметры уже сказали..., ты прям как первый раз замужем....;)


Anatoly Podgoretsky   (2007-05-10 10:14:00) [4]

> allucard  (10.05.2007 10:06:10)  [10]

Ну явно же написано - список
параметров различается.

BeforePost + F1

 "allucard" <vodvorezlaya@i.ua> wrote in message
news:1178614169.10@delphimaster.ru...
 allucard (10.05.2007 10:06) [10]

 > {RASkov} ©   (10.05.07 09:51) [8]

 понял.

 не могу присвоить
обработчик события для DataSet.

 procedure TForm2.FormCreate(Sender: TObject);
 begin

 ClientDataSet1 := TClientDataSet.Create(Self);
 ClientDataSet1.LoadFromFile('users.dat')

 ClientDataSet1.BeforePost := ClientDataSet1BeforePost;

 DataSource := TDataSource.Create(self);
 DataSource.Enabled := false;
 DataSource.DataSet := ClientDataSet1;
 DataSource.Enabled := true;
 DBGrid1.DataSource := DataSource;
 DBGrid1.Enabled := true;

 end;

 затем в ручную прописываю:

  TForm2 = class(TForm)
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    ClientDataSet1: TClientDataSet;
    DataSource: TDataSource;
    procedure ClientDataSet1BeforePost;
  public
  end;

 и его реализацию:

 procedure TForm2.ClientDataSet1BeforePost;
 begin
    showmessage('123');
 end;

 пишет ошибку:

 [Error] Unit2.pas(152): Incompatible types: 'Parameter lists differ'

 что не так?


allucard   (2007-05-10 10:06:00) [5]


> {RASkov} ©   (10.05.07 09:51) [8]

понял.

не могу присвоить обработчик события для DataSet.

procedure TForm2.FormCreate(Sender: TObject);
begin

ClientDataSet1 := TClientDataSet.Create(Self);
ClientDataSet1.LoadFromFile('users.dat')

ClientDataSet1.BeforePost := ClientDataSet1BeforePost;

DataSource := TDataSource.Create(self);
DataSource.Enabled := false;
DataSource.DataSet := ClientDataSet1;
DataSource.Enabled := true;
DBGrid1.DataSource := DataSource;
DBGrid1.Enabled := true;

end;


затем в ручную прописываю:

 TForm2 = class(TForm)
   DBGrid1: TDBGrid;
   DBNavigator1: TDBNavigator;
   procedure FormDestroy(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   ClientDataSet1: TClientDataSet;
   DataSource: TDataSource;
   procedure ClientDataSet1BeforePost;
 public
 end;


и его реализацию:

procedure TForm2.ClientDataSet1BeforePost;
begin
   showmessage('123');
end;


пишет ошибку:

[Error] Unit2.pas(152): Incompatible types: 'Parameter lists differ'

что не так?


{RASkov}   (2007-05-10 10:02:00) [6]

> [7] allucard   (10.05.07 09:33)
Мне нужно чтоб значение можно было выбрать только из этого списка

Заполни PickList для колонки Грида с нужным полем
ну а правильность значения проверяй в, где-нибудь, например: OnSetText или BeforePost....

> желательно кнопки раскрывающегося списка отображались
> всегда, а не только в режиме edit.

Свой(и) комбик(и) "рисуй" в гриде, как это сделать думаю, разберешься, так как это другая тема.


{RASkov}   (2007-05-10 09:51:00) [7]

> [7] allucard   (10.05.07 09:33)

Не ячейку проверять нужно а набор данных(DataSet) и его State....


allucard   (2007-05-10 09:33:00) [8]

У меня в ячейках раскрывающийся список.
Мне нужно чтоб значение можно было выбрать только из этого списка
от 1 до 8, желательно кнопки раскрывающегося списка отображались всегда, а не только в режиме edit.

Как проверить находится ли ячейка в режиме edit или insert?

Спасибо.


{RASkov}   (2007-05-10 09:27:00) [9]

> [5] allucard   (10.05.07 09:01)
>А как обратиться к текущей ячейке?

См [4], я надеюсь ты не напрямую, имеешь ввиду, ячейку грида.... или что есть - текущая ячейка?
См. Value, AsXxxxx или что тебе нужно от "ячейки"?


allucard   (2007-05-10 09:01:00) [10]


> Desdechado ©   (08.05.07 15:44) [4]

Спасиб.
Понял.

А как обратиться к текущей ячейке?


Desdechado   (2007-05-08 15:44:00) [11]

property SelectedField: TField;
Specifies the field component for the currently selected cell in the grid.


allucard   (2007-05-08 13:45:00) [12]

Какое свойство определяет в каком столбце находится курсор ввода DBGrid?


Reindeer Moss Eater   (2007-05-08 12:53:00) [13]

Как это сделать, ведь всё создаётся в Run-time?

Все в мире создается в рантайм. В чем же отличие у тебя?
Свойство перестает быть доступным?


Правильный Вася   (2007-05-08 12:52:00) [14]

Dataset.BeforePost


Наверх

Титульная страница Поиск, карта сайта Написать письмо