DBEdit та DateTimePicker

За допомогою процедури намагаюся відкрити потрібний DateTimePicker:

procedure TForm8.DoubleEditClick(Sender: TObject); Begin if (Sender <> nil) and (Sender is TDBEdit) then TDateTimePicker(TDBEdit(Sender).Hint).Perform(WM_KEYDOWN, VK_F4, 0); End;

але з'являється помилка: "Access violation."

Підкажіть будь ласка, де помилка.

> > Підкажіть будь ласка, де помилка.

. та як її можна виправити?

> . і як її можна виправити?

Залежить від того, що хочеш отримати.

> [3] гальмо (03.05.07 12:16) > . і як її можна виправити?а чому Hint?

На формі розташовано багато DBEdit-ів. Для кожного є свій DateTimePicker, який розкривається (має) при подвійному натисканні на DBEdit (за допомогою процедури "DoubleEditClick"). Номер DateTimePicker-a знаходиться в Hint.

Тобто. щоб не писати зайвих процедур, хочу скористатися однією універсальною.

> Номер DateTimePicker-a знаходиться в Hintтак якщо це тільки номер, то чому власне TDateTimePicker(TDBEdit(Sender).Hint)?

Якщо це тільки номер, то чому власне TDateTimePicker(TDBEdit(Sender).Hint)?

але проблема, то не наважиться

> [6] гальмо (03.05.07 14:04) >можнаі "tag"Тодіпотрібно. Покажи як ти в Hint засовуєш DateTimePicker.

гальмо (03.05.07 14:18) [8]

TDateTimePicker(1) - це НЕ DateTimePicker1

> [8] гальмо (03.05.07 14:18)DBEdit.Tag:=DateTimePicker; . if TObject(Sender.Tag) is TDateTimePicker then TDateTimePicker(Sender.Tag).Time:=.

> TDateTimePicker(1) - це НЕ DateTimePicker1

> [12] гальмо (03.05.0714:23) > а що?Це - 1:) і внаслідок AV. Так-а.

DBEdit.Tag:=DateTimePicker; - А це навіщо.

> [14] гальмо (03.05.07 14:29)Проїхали. суй у hint, якщо не хочеш прислухатися/зрозуміти поради.

При подвійному натисканні на DBEdit1 мені потрібно відкрити DateTimePicker1:

procedure TForm1.DBEdit1DblClick(Sender: TObject); begin DateTimePicker1.Perform(WM_KEYDOWN, VK_F4, 0); end;

При подвійному натисканні на DBEdit2 мені потрібно відкрити DateTimePicker2:

procedure TForm1.DBEdit2DblClick(Sender: TObject); begin DateTimePicker2.Perform(WM_KEYDOWN, VK_F4, 0); end;

і так ТРИДЦЯТЬ РАЗ

тому DBEdit1.Hint:="1"; DBEdit2.Hint:="2"; . DBEdit30.Hint:="30";

procedure TForm8.DoubleEditClick(Sender: TObject); Begin if (Sender <> nil) and (Sender is TDBEdit) then TDateTimePicker(TDBEdit(Sender).Hint).Perform(WM_KEYDOWN, VK_F4, 0); End;

спробував зробити одну універсальну замість 30-ї.

>TDateTimePicker(1) - це НЕ DateTimePicker1

Все питання в тому, як отримати DateTimePicker1, а не TDateTimePicker(1)

> [17] гальмо (03.05.07 14:52)Це що. уособлення НІКА. подивися [11] і остання пропозиція, підкоригуй і заміни в себе ось це TDateTimePicker(TDBEdit(Sender).Hint).Perform(WM_KEYDOWN, VK_F4, 0); Попередньо з того ж [11 ] подивися як засовувати DateTimePicker"и в DBEdit"и.

procedure TForm8.DoubleEditClick(Sender: TObject); begin if (Sender <> nil) and (Sender is TDBEdit) then TDateTimePicker(FindComponent("DateTimePicker" + TDBEdit(Sender).Hint) )).Perform(WM_KEYDOWN, VK_F4, 0); end;