Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
ВнизОбработчик события для компонента созданного в RunTime. Найти похожие ветки
← →
allucard (2007-05-08 12:49) [0]Доброго дня.
У меня два вопроса.
1. Есть компонент TDataSource связанный с DBGrid, мне нужно после ввода значения в 3,4,5 или 6-й столбец проверить соответствует ли он числу в диапазоне от 1 до 8, и если нет то вернуть фокус DBrid.
Как это сделать, ведь всё создаётся в Run-time?
2. Хотелось бы конечно чтоб проверкой занимался только DBGrid, каой метод лучше переписать? Key press? Как это сделать в Runtime?
Спасибо.
← →
Правильный Вася (2007-05-08 12:52) [1]Dataset.BeforePost
← →
Reindeer Moss Eater © (2007-05-08 12:53) [2]Как это сделать, ведь всё создаётся в Run-time?
Все в мире создается в рантайм. В чем же отличие у тебя?
Свойство перестает быть доступным?
← →
allucard (2007-05-08 13:45) [3]Какое свойство определяет в каком столбце находится курсор ввода DBGrid?
← →
Desdechado © (2007-05-08 15:44) [4]property SelectedField: TField;
Specifies the field component for the currently selected cell in the grid.
← →
allucard (2007-05-10 09:01) [5]
> Desdechado © (08.05.07 15:44) [4]
Спасиб.
Понял.
А как обратиться к текущей ячейке?
← →
{RASkov} © (2007-05-10 09:27) [6]> [5] allucard (10.05.07 09:01)
>А как обратиться к текущей ячейке?
См [4], я надеюсь ты не напрямую, имеешь ввиду, ячейку грида.... или что есть - текущая ячейка?
См. Value, AsXxxxx или что тебе нужно от "ячейки"?
← →
allucard (2007-05-10 09:33) [7]У меня в ячейках раскрывающийся список.
Мне нужно чтоб значение можно было выбрать только из этого списка
от 1 до 8, желательно кнопки раскрывающегося списка отображались всегда, а не только в режиме edit.
Как проверить находится ли ячейка в режиме edit или insert?
Спасибо.
← →
{RASkov} © (2007-05-10 09:51) [8]> [7] allucard (10.05.07 09:33)
Не ячейку проверять нужно а набор данных(DataSet) и его State....
← →
{RASkov} © (2007-05-10 10:02) [9]> [7] allucard (10.05.07 09:33)
Мне нужно чтоб значение можно было выбрать только из этого списка
Заполни PickList для колонки Грида с нужным полем
ну а правильность значения проверяй в, где-нибудь, например: OnSetText или BeforePost....
> желательно кнопки раскрывающегося списка отображались
> всегда, а не только в режиме edit.
Свой(и) комбик(и) "рисуй" в гриде, как это сделать думаю, разберешься, так как это другая тема.
← →
allucard (2007-05-10 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"
что не так?
← →
Anatoly Podgoretsky © (2007-05-10 10:14) [11]> 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"
что не так?
← →
{RASkov} © (2007-05-10 10:21) [12]> [10] allucard (10.05.07 10:06)
> ClientDataSet1 := TClientDataSet.Create(Self);
.........
> DataSource := TDataSource.Create(self);
А в чем необходимость создание этой всей лабуды в рантайме? Почему бы их не бросить на форму и настроить все в ИО?
Про параметры уже сказали..., ты прям как первый раз замужем....;)
← →
ЮЮ © (2007-05-10 10:27) [13]Открыть справку
property BeforePost: TDataSetNotifyEvent;
type TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;
потом сравнить со списком параметров в твоём методе и искоренить глобальное отличие.
← →
allucard (2007-05-10 10:39) [14]
> 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;
Всем спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.056 c