Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.49 MB
Время: 0.051 c
2-1181811128
kukuikar
2007-06-14 12:52
2007.07.08
Как работать с редактором формул MS Word из своей программы


15-1181115561
boriskb
2007-06-06 11:39
2007.07.08
переехать в Казахстан?


2-1181710818
Layner
2007-06-13 09:00
2007.07.08
Ошибка в работе с DBChart (TeeChart 4.04)


8-1161166747
-Deniska-
2006-10-18 14:19
2007.07.08
Алгоритм закарски


2-1181889608
Баян 555
2007-06-15 10:40
2007.07.08
перевод в читабельный вид





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский