![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Sender ;is ;TDB...
Silver_ © (2003-03-17 09:26:00)Как узнать что обьект из "семеиства" TDB т.е. предназначен для доступа к данным.
Есть ли более красивый способ ЛУЧШЕ чем проверка на имение своиства DataSource
чтоб работало напримерTDB...(aDBObject).DataSource:=для лубого ДБ обьекта
Silver_ (2003-03-17 16:22:00) [1]выглядит неплохо, пробую, спасибо
> Ну а чуть-чуть подумать...
а ты думаешь лень зря изобрели :о))
Dred2k (2003-03-17 13:48:00) [2]Да, и еще перед проверкой "is" по-любому надо
if(Assigned(tmpObject)) then
// ...
Спешка ;)
Dred2k (2003-03-17 13:43:00) [3]2 Johnmen
Да никакого. Для полного кайфа надо добавить:
var tmpObject : TObject;
try
// ...
tmpObject := Pointer(GetOrdProp(Instance, tmpPropInfo));
if(tmpObject is TDataSource) then
Result := tmpObject;
except
Result := nil;
end;
И передавай хоть что, включая и объекты со свойством DataSource вообще другой природы...
Johnmen (2003-03-17 13:40:00) [4]>Dred2k © (17.03.03 13:31)
А есть уверенность, что наличие свойства DataSource необходимо и достаточно, чтобы "обьект из "семеиства" TDB " ?
Dred2k (2003-03-17 13:31:00) [5]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:27:00) [6]Было сказано, что такого "семеиства" нет, с сохранением авторского синтаксиса.
Проблема нерешаема, т.к. невозможно выделить к.-л. общие характеристики в классах DB-Aware компонент.
Silver_ (2003-03-17 13:21:00) [7]на счет "семеиства" :)
ну да ладно проблема то осталась :(((
Johnmen (2003-03-17 13:19:00) [8]Никаких придирок не было !
Silver_ (2003-03-17 13:15:00) [9]так я и сам умею
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)
не нужно придираться к словам меня ведь поняли :)
Dred2k (2003-03-17 12:09:00) [10]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;
Копай в этом направлении...
passm (2003-03-17 10:22:00) [11]Вопрос сводится к:
Возможен ли перебор свойств компонента (published) с просмотром их типов? Как это делается в среде Delphi с выводом в Object Inspector.
Ответ, IMHO, надо искать в TObject.ClassInfo
myor (2003-03-17 10:07:00) [12]определи имя объекта sender.name, а в нем найди подстроку "tdb".
ну и задачки, однако.
гончий (2003-03-17 10:06:00) [13]if Sender is TDataSet then
with Sender as TDataSet do
begin
//......
end;
Johnmen (2003-03-17 09:44:00) [14]>Как узнать что обьект из "семеиства" TDB ...
Такого "семейства" нет... Предназначенность для доступа к данным вовсе не означает наличие свойства DataSource.