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;