![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработчик события для компонента созданного в 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