Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

Требуется помощь в изменении компонента.   Найти похожие ветки 

 
Константин Рязанкин   (2004-08-09 21:11) [0]

Доброго времени суток.
Есть такой компонент:

unit BitBtnSelect;

interface

uses
 SysUtils, Classes, Controls, StdCtrls, Buttons,Dialogs,Select_book,ADODB,DB,DBCtrls;

type
 TBitBtnSelect = class(TBitBtn)
 private
   FSelect:TF_Select;
   FCaption:TCaption;
   Fado:TADOConnection;
   FTableSelect:string;
   FKeyField:string;
   FValueField:string;
   procedure SetFormField(Value:TWinControl);
   procedure SetCaption(Value:TCaption);
   procedure SetADO(Value:TADOConnection);
   procedure SetTableSelect(Value:string);
   procedure SetKeyField(Value:string);
   procedure SetValueField(Value:string);
 public
   constructor Create(AOwner: TComponent); override;
 published
   property AdoConnection:TADOConnection read Fado write SetAdo;
   property TableSelect:string read FTableSelect write SetTableSelect;
   property KeyField   :string read FKeyField    write SetKeyField;
   property ValueField :string read FValueField  write SetValueField;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("My Component", [TBitBtnSelect]);
end;

constructor TBitBtnSelect.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FAdo:=nil;
 Caption:="";
 FCaption:="";
 FTableSelect:="";
 FKeyField:="";
 FValueField:="";
end;

procedure TBitBtnSelect.SetADO(Value:TADOConnection);
begin
 if Value <> FADO then
 begin
   FAdo := Value;
   Invalidate;
 end;
end;

procedure TBitBtnSelect.SetTableSelect(Value:string);
begin
 FTableSelect := Value;
end;

procedure TBitBtnSelect.SetKeyField(Value:string);
begin
   FKeyField := Value;
end;

procedure TBitBtnSelect.SetValueField(Value:string);
begin
   FValueField := Value;
end;
end.


Хотелось TableSelect не вводить ручками, а выбирать из списка, полученного из RecordSet:
rc:=Fado.Execute("select name from sysobjects")


 
Юрий Зотов ©   (2004-08-10 09:27) [1]

1. Из всех методов нужен только SetADO. Остальные (включая конструктор) ничего не делают и их можно совершенно спокойно убрать.

2. В SetAdo не хватает FreeNotification, а еще требуется замещение Notification. Иначе после удаления компонента, на который ссылается поле FADO будете получать Access Violation.

2. По сабжу - нужно написать редактор свойства. Отнаследуйте его от TStringProperty, заместите методы GetAttributes и  GetValues. Подробности см. в справке по TPropertyEditor и в коде модуля DesignEditors.


 
Константин Рязанкин   (2004-08-10 10:03) [2]

Юрий Зотов ©   (10.08.04 09:27) [1]
Писать редактор свойства пробовал. Проблема в том, что у меня не получается из ф-ции GetValues достучаться до Fado.


 
Юрий Зотов ©   (2004-08-10 10:11) [3]

TBitBtnSelect(GetComponent(0)).AdoConnection


 
Sandman25 ©   (2004-08-10 10:21) [4]

Константин Рязанкин  

Очень рекомендую писать const перед описанием формальных параметров типа String.


 
Константин Рязанкин   (2004-08-10 10:43) [5]

Юрий Зотов ©   (10.08.04 10:11) [3]

Получилось следующее:
type
 TTSPropED=class(TPropertyEditor)
 public
   procedure GetValues(proc:TGetStrProc); override;
   function GetAttributes:TPropertyAttributes; override;
 end;

function TTSPropED.GetAttributes:TPropertyAttributes;
begin
 Result:=[paValueList];
end;

procedure TTSPropED.GetValues(proc:TGetStrProc);
var
dd:TADOConnection;
 cc:_Recordset;
 sql:string;
begin
 dd:=TSpdBtnSelect(GetComponent(0)).AdoConnection;
 if dd <> nil then
 begin
   sql:="select name from sysobjects";
   cc:=dd.Execute(sql);
   ShowMessage("select yes");
   while not cc.EOF do
     begin
       proc(cc.Fields["name"].Value);
       cc.MoveNext;
     end;
   cc:=nil;
 end;
end;

 TSpdBtnSelect = class(TSpeedButton)
 private
...
   FTableSelect:TStringList;
...
   procedure SetTableSelect(Value:TStringList);
 published
   property TableSelect:TStringList read FTableSelect write SetTableSelect;
...


Список получен, но выбранное значение не отображется в свойстве TableSelect


 
Юрий Зотов ©   (2004-08-10 19:39) [6]

Наследуйтесь от TStringProperty. И исправьте GetAttributes:
Result := inherited GetAttributes + [paValueList]



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

Форум: "Компоненты";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.042 c
3-1120285524
Draught
2005-07-02 10:25
2005.08.07
Фильтр в ADOTable


3-1120028216
WondeRu
2005-06-29 10:56
2005.08.07
Трудности перевода. BDE->ADO


8-1112786904
murk2
2005-04-06 15:28
2005.08.07
Как сделать коррекцию гаммы в TBitmap?


3-1120014251
Извращенец2
2005-06-29 07:04
2005.08.07
Инструменты для работы с MSSQL


1-1121755213
WondeRu
2005-07-19 10:40
2005.08.07
Ошибка при создании вариантного массива





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский