Fórum EDITOR DE COMPONENTES E COMPONENTES VISUAIS. #366994
10/12/2008
0
ESPERO QUE ENTENDAM O QUE PRECISO, VLW GALERA
Rpdesign
Curtir tópico
+ 0Posts
10/12/2008
Rpdesign
Gostei + 0
11/12/2008
Rpdesign
http://universodelphi.blogspot.com/2008/01/editor-de-componente.html
Gostei + 0
11/12/2008
Facc
Gostei + 0
11/12/2008
Rpdesign
alguem ai tem alguma ideia de porque isso nao funciona???
to pesquisando mas noa acho nada sobre o assunto
Gostei + 0
13/12/2008
Rpdesign
Gostei + 0
15/12/2008
Cruyahoo
precisa.
Aproveitando o assunto , eu tambem estou com um probleminha que nao consigo fazer uma edicao de propriedade para aparecer os campos
de uma table, na construcao de um componente.
Se souber me avise aqui no site please.
boa sorte.
Gostei + 0
15/12/2008
Fabriciocolombo
Segue link...
http://www.4shared.com/account/file/76082770/e898bd5e/Editor_de_Component.html
Gostei + 0
15/12/2008
Rpdesign
editor de propriedades e de componente sao diferentes, mas valeu a dica, quem sabe ele nao fala sobre os dois assuntos, vou pesquisar e aviso o pessoal se funcionaou, vou testar tambem o exemplo do nosso amigo abaixo,
tente esplica o que voce quis dizer com ´ Aproveitando o assunto , eu tambem estou com um probleminha que nao consigo fazer uma edicao de propriedade para aparecer os campos
de uma table, na construcao de um componente.
Se souber me avise aqui no site please.
´
quem sabe podemos te ajudar
Gostei + 0
15/12/2008
Rpdesign
http://www.4shared.com/account/file/76082770/e898bd5e/Editor_de_Component.html
obrigado FabricioColombo consegui fazer o que eu precisava apartir do seu exemplo, vou dar uma aprofundada melhor depois, mas desde ja muito obrigado, apesar de ter conseguido noa entendi direito o que aconteceu, porque existe uma referencia circular ignorada pelo compilador que geralmente exibe algum erro, e mesmo assim funcionou, as chamadas tambem estao estranhas, vou procurar sobre Luiz Roche quem sabe consigo entender melhor o que aconteceu...
não querendo abusar, eu na verdade usei somente os itens relacionados ao editor de componentes, a parte de edicao de propriedades nao usei, mesmo porque nao sei como funciona direito, deixei por conta do object inspector se virar com os campos, mas tenho muito interesse em aprender sobre isso, se alguem tiver alguma coisa...
o processo para criar editores individuais para cada propriedade é semelhante a esse que o FabricioColombo passou?
ex: noa quero que a pessoa de duplo clique para editar o componente, quero por exemplo que cada propriedade tenah seu proprio editor, ex: um componente de impressao, com as propriedades Porta, Pagina, Campos
onde a propriedade porta abriria um dialog com a lista das portas instaladas no windows para selecionar inpedindo assim que a pessoa digite um valor invalido, Pagina abrindo um dialog onde a pessoa arraste os campos e monte o relatorios, e campos com um dialog onde vc seleciona os campos da tabela que seram listados....
entendeu? nao quero fazer isso exatamente mas queria criar esses editores em todas as propriedades...
vle galera
Gostei + 0
15/12/2008
Rpdesign
Gostei + 0
15/12/2008
Fabriciocolombo
se vc estiver usando ´DataField´ como nome da propriedade, o delphi já deveria mostrar os campos no object inspector... se vc estiver usando outro nome de propriedade, como ´FieldName´, por exemplo, vc deve fazer o registro do Editor.
RegisterPropertyEditor(TypeInfo(string), TClasseDoComponent, ´FieldName´, TDataFieldProperty);
P.S. precisa adicionar a uses DBReg;
Gostei + 0
15/12/2008
Fabriciocolombo
TWinControl - O ponto de partida se é necessário que o componente tenha ´handles´ (foco).
TGraphicControl - Um ponto de partida bom para componentes visuais que não tenham ´handles´, ou seja, não recebem foco. Esta classe tem os metodos Paint e Canvas.
TCustomControl - O ponto de partida mais comum. Esta classe tem ´handle´ de janela, eventos e propriedades comuns e, principalmente, os metodos Canvas e Paint.
Para unir mais de um componente, podem utilizar um panel para criar um container, e criar os componentes em RunTime dentro do panel, ou apenas ´ligá-los´ através de properties como o TLabeledEdit que vem com o delphi. Olhe a implementação do compoente TCustomLabeledEdit na vcl do delphi.
Gostei + 0
17/12/2008
Rpdesign
unit SuperComboBox;
interface
uses
SysUtils, Classes, DesignEditors, DesignIntf,
Windows, Messages, Controls, StdCtrls, Grids, ValEdit, Consts, Dialogs;
type
TSuperComboBox = class(TComboBox)
private
FDBField:String;
FNulo : Boolean;
FMsgNulo : String;
FTESTE : TItemProps;
FRegiao:integer;
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
property DBField : String read FDBField write FDBField;
property DBRegiao : Integer read FRegiao write FRegiao;
property Nulo : Boolean read FNulo write Fnulo;
property MsgNulo : String read FMsgNulo write FMsgNulo;
end;
TEditorSuperComboForm = class(TComponentEditor)
private
public
function GetVerb(Index: Integer): String; override;
function GetVerbCount: Integer; override;
procedure Edit; override;
procedure ExecuteVerb(Index: Integer); override;
end;
procedure Register;
implementation
{ TEditorSuperComboForm }
uses uEditorSuperComboDialog;
constructor TSuperComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FNulo:=true;
end;
procedure TEditorSuperComboForm.Edit;
begin
inherited;
end;
procedure TEditorSuperComboForm.ExecuteVerb(Index: Integer);
var
SuperComboBox : TSuperComboBox;
begin
case Index of
0: Execute(Component as TSuperComboBox);
end;
end;
function TEditorSuperComboForm.GetVerb(Index: Integer): String;
begin
case Index of
0: Result := ´Editar´;
end;
end;
function TEditorSuperComboForm.GetVerbCount: Integer;
begin
Result := 1;
end;
procedure Register;
begin
RegisterComponents(´SuperComponentes´, [TSuperComboBox]);
//Esse é o que aparece com o botão direito do mouse ou duplo clique no componente
RegisterComponentEditor(TSuperComboBox, TEditorSuperComboForm);
end;
end.
unit uEditorSuperComboDialog;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, ValEdit, SuperComboBox, AUTOMASOFT;
type
TEditorSuperComboDialog = class(TForm)
ValueListEditor1: TValueListEditor;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
private
{ Private declarations }
public
itens : TStrings;
{ Public declarations }
end;
procedure Execute(Editor : TSuperComboBox);
var
EditorSuperComboDialog: TEditorSuperComboDialog;
implementation
{$R *.dfm}
procedure Execute(Editor : TSuperComboBox);
var
fEditor: TEditorSuperComboDialog;
i, l : integer;
flag : boolean;
begin
try
fEditor := TEditorSuperComboDialog.Create(Editor);
fEditor.itens:=Editor.Items;
/// verifica se tem itens
if fEditor.Itens.Count>0 then
begin
//pula os itens no formato errado
for i:=0 to fEditor.Itens.Count-1 do
begin
flag:=false;
for l:=0 to length(trim(fEditor.Itens[i])) do
begin
// showmessage(copy(trim(fEditor.Itens[i]),l,1));
if copy(trim(fEditor.Itens[i]),l,1)=´>´ then
begin
flag:=true;
break;
end;
end;
if flag then
if (trim(EXPLODE(trim(fEditor.Itens[i]),´>´)[0])<>´´) and (trim(EXPLODE(trim(fEditor.Itens[i]),´>´)[1])<>´´) then
fEditor.ValueListEditor1.InsertRow(EXPLODE(trim(fEditor.Itens[i]),´>´)[0],EXPLODE(trim(fEditor.Itens[i]),´>´)[1],TRUE);
end;
end;
//// grava mudancas
if fEditor.ShowModal = mryes then
begin
/// armazena resultado
Editor.Items.Clear;
for i:=1 to fEditor.ValueListEditor1.RowCount-1 do
begin
Editor.AddItem(fEditor.ValueListEditor1.Keys[i]+´ > ´+fEditor.ValueListEditor1.Values[fEditor.ValueListEditor1.Keys[i]],Editor);
end;
end;
finally
fEditor.Free;
end;
end;
end.
Gostei + 0
17/12/2008
Fabriciocolombo
Gostei + 0
29/12/2008
Cruyahoo
detalhe do que estou tentando fazer.
Bem , fiz alguns testes e consegui da senguinte maneira:
Properties Campo : Tfield read fCampo write setCampo ;
onde a setCampo segue como procedure:
procedure TAlteraSenha.SetCampoSenha(VCampo:Tfield);
begin
if Vcampo <> FcampoSenha then FcampoSenha := Vcampo;
end;
Sendo assim meu componente aparecerá no object inspector o combobox de campos da tabela no seguinte formato:
assim:
TBCLIENTESnome
TBCLIENTESendereco
ou quando se usa Data Module:
DataModule1.TBCLIENTESnome
Datamodule1.TBCLIENTESendereco
Já está funcionando, mas gostaria que apareceresse somente
o nome de campo ex. nome
enrereco
cep
hardruzzi
«
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)