Текущий архив: 2003.04.03;
Скачать: 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 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c