Вниз
Скачать: CL | DM;

Sender is TDB...   Найти похожие ветки 

← →
Silver_   (2003-03-17 09:26) [0]

Как узнать что обьект из "семеиства" TDB т.е. предназначен для доступа к данным.

Есть ли более красивый способ ЛУЧШЕ чем проверка на имение своиства DataSource

чтоб работало например TDB...(aDBObject).DataSource:= для лубого ДБ обьекта


← →
Johnmen ©   (2003-03-17 09:44) [1]

>Как узнать что обьект из "семеиства" TDB ...

Такого "семейства" нет... Предназначенность для доступа к данным вовсе не означает наличие свойства DataSource.


← →
гончий   (2003-03-17 10:06) [2]

if Sender is TDataSet then
with Sender as TDataSet do
begin
//......
end;


← →
myor ©   (2003-03-17 10:07) [3]

определи имя объекта sender.name, а в нем найди подстроку "tdb".
ну и задачки, однако.


← →
passm ©   (2003-03-17 10:22) [4]

Вопрос сводится к:
Возможен ли перебор свойств компонента (published) с просмотром их типов? Как это делается в среде Delphi с выводом в Object Inspector.
Ответ, IMHO, надо искать в TObject.ClassInfo


← →
Dred2k ©   (2003-03-17 12:09) [5]

2 passm

Все можно. Вот пример, где я иду по всем компонентам формы, ищу проперти Caption и Hint, а затем перевожу их с помощью специальной функции Lang.


procedure TFormMainDBDoctor.LangFormComponents(AForm: TForm);
var i : Integer;
tmpPropInfo: PPropInfo;
begin
with AForm do begin
Caption := Lang(Caption);
for i := 0 to ComponentCount - 1 do begin
tmpPropInfo := GetPropInfo(Components[i].ClassInfo, "Caption");
if(Assigned(tmpPropInfo)) then
SetStrProp(Components[i], tmpPropInfo, Lang(GetStrProp(Components[i], tmpPropInfo)));
tmpPropInfo := GetPropInfo(Components[i].ClassInfo, "Hint");
if(Assigned(tmpPropInfo)) then
SetStrProp(Components[i], tmpPropInfo, Lang(GetStrProp(Components[i], tmpPropInfo)));
end;
end;
end;


Копай в этом направлении...


← →
Silver_   (2003-03-17 13:15) [6]

так я и сам умею

If Sender is TDBEdit then
DBNavigetor.DataSource:=TDBEdit(Sender).DataSource;
If Sender is TDBMemo then
DBNavigetor.DataSource:=TDBMemo(Sender).DataSource;
If Sender is TDBGrid then
DBNavigetor.DataSource:=TDBGrid(Sender).DataSource;
If Sender is TDBRichEdit then
DBNavigetor.DataSource:=TDBRichEdit(Sender).DataSource;
...
...

скока так продолжать

хотел чтоб выше указаный код (в бог знает скока строк)
выглядел примерно так

DBNavigetor.DataSource:=TDB...(Sender).DataSource;


> Johnmen © (17.03.03 09:44)

не нужно придираться к словам меня ведь поняли :)


← →
Johnmen ©   (2003-03-17 13:19) [7]

Никаких придирок не было !


← →
Silver_   (2003-03-17 13:21) [8]

на счет "семеиства" :)
ну да ладно проблема то осталась :(((


← →
Johnmen ©   (2003-03-17 13:27) [9]

Было сказано, что такого "семеиства" нет, с сохранением авторского синтаксиса.
Проблема нерешаема, т.к. невозможно выделить к.-л. общие характеристики в классах DB-Aware компонент.


← →
Dred2k ©   (2003-03-17 13:31) [10]

2 Silver_

Ну а чуть-чуть подумать...


uses TypInfo;

function DataSourceFromObject(Instance : TObject) : TDataSource;
var tmpPropInfo : PPropInfo;
begin
Result := nil;
tmpPropInfo := GetPropInfo(Instance.ClassInfo, "DataSource");
if(Assigned(tmpPropInfo)) then
Result := Pointer(GetOrdProp(Instance, tmpPropInfo));
end;


И мучения твои принимают вид

DBNavigetor.DataSource := DataSourceFromObject(Sender);


Вуаля, блин. ;)


← →
Johnmen ©   (2003-03-17 13:40) [11]

>Dred2k © (17.03.03 13:31)

А есть уверенность, что наличие свойства DataSource необходимо и достаточно, чтобы "обьект из "семеиства" TDB " ?


← →
Dred2k ©   (2003-03-17 13:43) [12]

2 Johnmen

Да никакого. Для полного кайфа надо добавить:

var tmpObject : TObject;
try
// ...
tmpObject := Pointer(GetOrdProp(Instance, tmpPropInfo));
if(tmpObject is TDataSource) then
Result := tmpObject;
except
Result := nil;
end;

И передавай хоть что, включая и объекты со свойством DataSource вообще другой природы...


← →
Dred2k ©   (2003-03-17 13:48) [13]

Да, и еще перед проверкой "is" по-любому надо

if(Assigned(tmpObject)) then
// ...


Спешка ;)


← →
Silver_   (2003-03-17 16:22) [14]

выглядит неплохо, пробую, спасибо


> Ну а чуть-чуть подумать...


а ты думаешь лень зря изобрели :о))



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.012 c
3-6385
Наташа
2003-03-15 13:15
2003.04.03
Редактор полей


3-6295
Ahmad K
2003-03-16 01:45
2003.04.03
Простейщий отчет


14-6763
Mike B.
2003-03-17 11:15
2003.04.03
Кнопка


14-6739
Malder
2003-03-15 16:19
2003.04.03
Главное меню в продуктах пакета Microsoft Office


1-6432
Артём К.
2003-03-23 16:08
2003.04.03
Как отцентровать текст сообщения в MessageBoxe




   Наверх