Fórum EDITOR DE COMPONENTES E COMPONENTES VISUAIS. #366994

10/12/2008

0

BOA TARDE GALERA ESTOU COM UM PROBLEMA, JA PROCUREI EM TODA PARTE MAS NAO ENCONTREI, SE ALGUEM TIVER UM EXEMPLO DE COMO FAÇO UM EDITOR DE COMPONETES, SABE AQUELES DIALOGS? QUE VOCE DA UM DUPLO CLIQUE NO COMPONENTE EM TEMPO DE DESIGN E ABRE O EDITOR... E TAMBEM TO TENTNDO FAZER UM COMPONENTE MISTO, UM EDIT COM UM BUTTON NA FRENTE, PRA FAZER TIPO UM VALIDADOR ex: UM CAPO EDIT ONDE A PESSOA DIGITA O CPF, E O BUTTON NA FRENTE QUE VERIFICA SE JA EXISTE, FAÇO ESSE TIPO DE COISA EM 10 LUGARES DIFERENTES E TODA HORA TENHO QUE COLOCAR O EDIT, DEPOIS O BUTTON E DEPOIS COLOCAR UMA FUNCAO DE VALUDACAO DO BUTTON PARA VALIDAQR O VALOR DO EDIT...

ESPERO QUE ENTENDAM O QUE PRECISO, VLW GALERA


Rpdesign

Rpdesign

Responder

Posts

10/12/2008

Rpdesign

UP


Responder

Gostei + 0

11/12/2008

Rpdesign

achei um topico interessante mas nao consegui fazer se alguem conseguir e puder explicar melhor....

http://universodelphi.blogspot.com/2008/01/editor-de-componente.html


Responder

Gostei + 0

11/12/2008

Facc

Amigo... nunca escreva o titulo do tópico nem a mensagem em caixa alta, dá impressão de vc estar gritando.


Responder

Gostei + 0

11/12/2008

Rpdesign

desculpe os gritos nao era a intenção :)

alguem ai tem alguma ideia de porque isso nao funciona???

to pesquisando mas noa acho nada sobre o assunto


Responder

Gostei + 0

13/12/2008

Rpdesign

up


Responder

Gostei + 0

15/12/2008

Cruyahoo

Procure Luiz Roche, editor de propriedades, que la tem exatamente o que
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.


Responder

Gostei + 0

15/12/2008

Fabriciocolombo

montei um exemplo criando um editor de propriedade e de componente. Qualquer dúvida estou a disposição.

Segue link...

http://www.4shared.com/account/file/76082770/e898bd5e/Editor_de_Component.html



Responder

Gostei + 0

15/12/2008

Rpdesign

Procure Luiz Roche, editor de propriedades, que la tem exatamente o que 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.


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


Responder

Gostei + 0

15/12/2008

Rpdesign

montei um exemplo criando um editor de propriedade e de componente. Qualquer dúvida estou a disposição. Segue link...
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


Responder

Gostei + 0

15/12/2008

Rpdesign

Desculpe parecer chato, sei que ja estou abusando, mas pulamos um topico, sobre os compoentes visuais, quando vou criar um novo componente preciso herdar de alguma coisa, e nao sei como fazer no caso de um componente ser a juncao de dois, como por exemplo um botao e um edit juntos


Responder

Gostei + 0

15/12/2008

Fabriciocolombo

cruyahoo

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;


Responder

Gostei + 0

15/12/2008

Fabriciocolombo

TComponent - O ponto de partida para componentes não visuais.
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.


Responder

Gostei + 0

17/12/2008

Rpdesign

primeiramente obrigado FabricioColombo, vou estudar isso com mais cuidado depois, estou com um grande problema pessoal, ta quase tudo certo mas ta dando erro o codigo ta ai em baixo, alguem sabe onde estou errando??


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.




Responder

Gostei + 0

17/12/2008

Fabriciocolombo

qual é o erro? é na compilação ou na execução?


Responder

Gostei + 0

29/12/2008

Cruyahoo

Obrigado pela dica vou desta-lo desta forma também mas vai aqui
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




«


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar