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

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

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

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

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

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

Я тоже об этом думал, но почемуто не смог найти эти сорсы!
Может ты знаещь где они лежат, подскажи!
...
Рейтинг: 0 / 0
Мой компонент!
    #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
Мой компонент!
    #32341856
BelAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем1:

А откуда вы этот файл взяли. Есть полная версия, если есть то киньте плизз вот сюда
belyaev@bratsk-city.ru и для большей надежности сюда antvir@yandex.ru
...
Рейтинг: 0 / 0
Мой компонент!
    #32341966
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это исходники vcl, они есть у тебя
...
Рейтинг: 0 / 0
Мой компонент!
    #32342017
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, у тебя они есть. У меня тут лежат:
C:\Program Files\Borland\Delphi6\Source\Vcl
...
Рейтинг: 0 / 0
Мой компонент!
    #32342875
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, а посмотреть список полей датасета через свойство FieldList почему не пробовали?
...
Рейтинг: 0 / 0
Мой компонент!
    #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
Мой компонент!
    #32343278
BelAS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mir:

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

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


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