Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Мой компонент! / 15 сообщений из 15, страница 1 из 1
02.12.2003, 12:49
    #32340569
BelAS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Пишу компонент. Одним из свойств моего компонента должно быть DataField;

Мой компонент связан с ADOTable или ADOQuery через DataSourse.

как передать свойству DataField список всех колонок в ADOTable или всех колонок возвращаемых запросом ADOQuery.

т.е. при настройке моего компонента в Object Inspector, в свойстве DataField
должны быть видны все поля таблицы или запроса, чтобы в это свойство программист не занес не существующего поля!

Кто понял что я тут написал, помогите разобраться!
...
Рейтинг: 0 / 0
02.12.2003, 13:29
    #32340658
Мой компонент!
Я делал, но у меня не получилось. Если самостоятельно сделаете, то обязательно напишите, очень интересно.
...
Рейтинг: 0 / 0
02.12.2003, 13:53
    #32340712
Hammer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Посмотри в сорсах TDbGrid как это делается для Column.
Сделай также.

...
Рейтинг: 0 / 0
03.12.2003, 11:21
    #32341724
BelAS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Hammer:

Я тоже об этом думал, но почемуто не смог найти эти сорсы!
Может ты знаещь где они лежат, подскажи!
...
Рейтинг: 0 / 0
03.12.2003, 11:27
    #32341738
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Если разберетесь, расскажите. :)

DBGrids.pas

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
procedure TColumn.SetField(Value: TField);
begin
  if FField = Value then Exit;
  if Assigned(FField) and (GetGrid <> nil) then
    FField.RemoveFreeNotification(GetGrid);
  if Assigned(Value) and (csDestroying in Value.ComponentState) then
    Value := nil;    // don't acquire references to fields being destroyed
  FField := Value;
  if Assigned(Value) then
  begin
    if GetGrid <> nil then
      FField.FreeNotification(GetGrid);
    FFieldName := Value.FullName;
  end;
  if not IsStored then
  begin
    if Value = nil then
      FFieldName := '';
    RestoreDefaults;
  end;
  Changed(False);
end;

procedure TColumn.SetFieldName(const Value: String);
var
  AField: TField;
  Grid: TCustomDBGrid;
begin
  AField := nil;
  Grid := GetGrid;
  if Assigned(Grid) and Assigned(Grid.DataLink.DataSet) and
    not (csLoading in Grid.ComponentState) and (Length(Value) >  0 ) then
      AField := Grid.DataLink.DataSet.FindField(Value); { no exceptions }
  FFieldName := Value;
  SetField(AField);
  Changed(False);
end;
...
Рейтинг: 0 / 0
03.12.2003, 12:25
    #32341856
BelAS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Артем1:

А откуда вы этот файл взяли. Есть полная версия, если есть то киньте плизз вот сюда
belyaev@bratsk-city.ru и для большей надежности сюда antvir@yandex.ru
...
Рейтинг: 0 / 0
03.12.2003, 13:14
    #32341966
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
это исходники vcl, они есть у тебя
...
Рейтинг: 0 / 0
03.12.2003, 13:40
    #32342017
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Ага, у тебя они есть. У меня тут лежат:
C:\Program Files\Borland\Delphi6\Source\Vcl
...
Рейтинг: 0 / 0
04.12.2003, 09:10
    #32342875
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Ребята, а посмотреть список полей датасета через свойство FieldList почему не пробовали?
...
Рейтинг: 0 / 0
04.12.2003, 10:01
    #32342937
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
{ TDataFieldProperty }

type
TDataFieldProperty = class(TDBStringProperty)
public
function GetDataSourcePropName: string; virtual;
procedure GetValueList(List: TStrings); override;
end;

function TDataFieldProperty.GetDataSourcePropName: string;
begin
Result := 'DataSource';
end;

procedure TDataFieldProperty.GetValueList(List: TStrings);
var
Instance: TComponent;
PropInfo: PPropInfo;
DataSource: TDataSource;
begin
Instance := TComponent(GetComponent(0));
PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, GetDataSourcePropName);
if (PropInfo <> nil) and (PropInfo^.PropType^.Kind = tkClass) then
begin
DataSource := TObject(GetOrdProp(Instance, PropInfo)) as TDataSource;
if (DataSource <> nil) and (DataSource.DataSet <> nil) then
DataSource.DataSet.GetFieldNames(List);
end;
end;

{ TLookupFieldProperty }

type
TLookupFieldProperty = class(TDataFieldProperty)
public
function GetDataSourcePropName: string; override;
end;

function TLookupFieldProperty.GetDataSourcePropName: string;
begin
Result := 'LookupSource';
end;
*
*
*
**
**
**
**
*

procedure Register;
begin
RegisterPropertyEditor(TypeInfo(string), TToriLUEdit , 'LookupFieldFind' , TLookupFieldProperty);
RegisterPropertyEditor(TypeInfo(string), TToriLUEdit , 'SuppementViewField', TLookupFieldProperty);
end ;
...
Рейтинг: 0 / 0
04.12.2003, 12:45
    #32343278
BelAS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
mir:

а как им воспольоваться то, он результат в виде чего выдает?
...
Рейтинг: 0 / 0
05.12.2003, 07:30
    #32344275
BelAS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
А вообще ктонибудь может мне подсказать как сделать так, чтобы в одном из свойств моего компонента пользватель мог поставить только те значения которые ему разрешается.

Т.е. когда он ткнет мышкой в поле значения компонента, ему выпадет список, где будут все возможные значения.
...
Рейтинг: 0 / 0
05.12.2003, 09:33
    #32344338
Tаrantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Делай свой редактор свойства
...
Рейтинг: 0 / 0
08.12.2003, 10:26
    #32346058
BelAS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
А где написано как его сделать?
...
Рейтинг: 0 / 0
08.12.2003, 19:11
    #32346982
Hammer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мой компонент!
Посмотри в $(DELPHI)\Demos\Propedit.
Енто примерчик редактора св-в.
А лучше подумай, м. б. енто св-во тебе сделать перечисляемым и не заморачиваться редакторами св-в.
Типа:
type
TMyProperty = ( smNone, smDown, smUp );
....
TMyComponent = class( TComponent )
....
published
property MyProperty: TMyProperty read FMyProperty write SetMyProperty;
....
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Мой компонент! / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]