Fórum limitar área de edição do edit #339277
24/03/2007
0
Meu problema consiste no seguinte: quando eu digito no edit o texto ´invade´ o botão, ou fica por trás deste.
Como eu posso limitar a área de edição do edit?
Grato!
Vitor Rubio
Curtir tópico
+ 0Posts
24/03/2007
Essistemas
Maxlenght !.
Gostei + 0
25/03/2007
Adriano Santos
Neste caso não vai adiantar colega, pois e se o programador que está usando componente aumentar ou diminuir a largura do componente? e se o cara quer um componente com uma largura pequena, mas que suporte 200 caracteres?
Tem é que descobrir como fazer para que o texto digitado fique por baixo do button que está sendo criado.
Gostei + 0
26/03/2007
Vitor Rubio
Um exemplo de componente que faz o que eu quero é o TJvComboEdit, da biblioteca Jedi. Alguém usa Jedi?
Quero fazer um componente igual aquele, para meu próprio aprendizado, mas não quero copiar e colar da Jedi antes de entender o que eu estou fazendo.
Gostei + 0
11/05/2007
Adriano Santos
Vlw.
Gostei + 0
12/05/2007
Aasn
a maneira mais prática de fazer isso é criar um ´container´ e nele inserir um edit e um botão, publicar eventos e propriedades desses subcomponentes...
Qualquer dúvida te mando um exemplo
[]´s
AASN
Gostei + 0
13/05/2007
Paullsoftware
Gostei + 0
14/05/2007
Aasn
unit AASNEditList;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
stdctrls, Mask, ToolEdit, DsgnIntf;
type
TAASNEditList = class(TCustomControl)
private
{ Private declarations }
FText : String;
FItems: TStrings;
FOnButtonClick: TNotifyEvent;
procedure SetText(valor: string);
procedure SetItems(valor: TStrings);
procedure ButtonClick(Sender: TObject);
procedure TeclaEnter(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure TeclaDel(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Notification(AComponent: TComponent; Operation: TOperation);
protected
{ Protected declarations }
public
{ Public declarations }
Edit : TComboEdit;
Lista : TListBox;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Color;
property Ctl3D;
property Enabled;
property Font;
property Text : String read FText write SetText;
property Items : TStrings read FItems write SetItems;
property OnButtonClick : TNotifyEvent read FOnButtonClick write FOnButtonClick;
procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(´Geral´, [TAASNEditList]);
end;
procedure TAASNEditList.TeclaEnter(Sender: TObject; var Key: Word;
Shift: TShiftState);
var FEditTmp : TCustomForm;
begin
if Key = VK_RETURN then
begin
Key := 0;
if Trim((Sender as TComboEdit).Text) <> ´´ then
begin
Lista.Items.Add((Sender as TComboEdit).Text);
(Sender as TComboEdit).Text := ´´;
end
else
begin
FEditTmp := GetParentForm(self);
PostMessage(FEditTmp.Handle, WM_NEXTDLGCTL, 0, 0);
// with Screen.ActiveForm do
// Perform(WM_NEXTDLGCTL,0,0);
end;
end;
end;
procedure TAASNEditList.TeclaDel(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i : integer;
begin
if Key = VK_DELETE then
begin
for i := (Sender as TListBox).Items.Count - 1 downto 0 do
if (Sender as TListBox).Selected[i] then
(Sender as TListBox).Items.Delete((Sender as TListBox).ItemIndex);
end;
end;
constructor TAASNEditList.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Width := 100;
Height := 100;
Ctl3D := False;
Edit := TComboEdit.Create(self);
with Edit do
begin
Parent := Self;
Left := 0;
Top := Self.Top;
Width := Self.Width;
GlyphKind := gkEllipsis;
CharCase := ecUpperCase;
OnKeyDown := TeclaEnter;
OnButtonClick := ButtonClick;
end;
FItems := TStringList.Create;
Lista := TListBox.Create(self);
with Lista do
begin
Parent := Self;
Left := 0;
Top := Self.Top + Edit.Height;
Width := Self.Width;
Height := Self.Height - Edit.Height;
OnKeyDown := TeclaDel;
TabStop := False;
end;
end;
procedure TAASNEditList.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
if (ATop > 0) and (AWidth > 0) and (AHeight > 0) then
begin
Edit.SetBounds(0, 0, AWidth, Edit.Height);
Lista.SetBounds(0, Edit.Height, AWidth, AHeight - Edit.height);
end;
end;
procedure TAASNEditList.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then
begin
if AComponent = Edit then
Edit := nil
else if AComponent = Lista then
Lista := nil;
end;
end;
destructor TAASNEditList.Destroy;
begin
inherited Destroy;
end;
procedure TAASNEditList.ButtonClick(Sender: TObject);
begin
if Assigned(OnButtonClick) then
OnButtonClick(Sender);
end;
procedure TAASNEditList.SetText(valor : string);
begin
FText := valor;
Edit.Text := valor;
end;
procedure TAASNEditList.SetItems(valor : TStrings);
begin
FItems.Clear;
FItems.AddStrings(valor);
Lista.Clear;
Lista.Items.AddStrings(valor);
end;
end....qualquer dúvida é só falar!
[]´s
AASN
Gostei + 0
14/05/2007
Aasn
Criei este componente com o intuito de que o cliente pudesse armazenar uma lista contendo características comuns a um determinado ítem...
A medida em que o usuário vai digitando e teclando ´enter´ as informações vão sendo armazenadas no listbox abaixo, e através do ´del´ pode-se eliminar ítem ou itens selecionados...
O botão junto ao edit serve para que o sistema possa chamar uma rotina qualquer, já é do conhecimento de todos o funcionamento dele.
Espero ter colaborado.
[]´s
AASN
p.s.: Talvez não seja exatamente o que o Vitor queria mas dá para ter uma idéia de como fazer, o princípio é o mesmo.
Gostei + 0
14/05/2007
Vitor Rubio
por exemplo, o ´if (seuEdir is TcustomEdit) then´ não funcionaria
na biblioteca JEDI tem um edit assim pronto, que é justamente o que eu quero, um edit com botão, que o texto vai só até o botão, e é descendente de tcustomedit (láááá em cima) . Parece que ele funciona ao contrario: coloca um tcustomcontrol dentro do edit, sendo o edit seu parent, e coloca o botão nele, mas eu nunca entendi como código fonte desse componente funciona, pois ele é pouco comentado.
não quero fazer um componente para usar ou vender, meu objetivo é mais didático. Lógico que se eu pudesse substituir componentes da Jedi e outros de terceiros por componentes meus seria melhor.
Gostei + 0
14/05/2007
Adriano Santos
Esse é sonho [b:64ecd3e75e]vitor^_^[/b:64ecd3e75e]. Os outros programadores que tinham na empresa pensavam apenas no presente e não no futuro. Ou seja, temos uns 300 componentes de terceiro instalados no Delphi e nosso sistema deve usar uns 200. Não consigo sair do Delphi 6 nem pra ir pro Delphi 7. Tudo isso pq o s caras pensavam assim: ah, quando for migrar pra outro Delphi a gente pensa nisso.
Estou com um programador aqui que pensa igual. Toda vez que ele precisa de algo ele mete outro componente em tela...cada dia que passa estamos mais afundados no Delphi 6. Sem condições de migrar.
A última dele foi colocar um componente que contém 1 Combo, 1 Edit e 1 SpeedButton. Quando vc sai do componente ele abre uma janelinha que tb é do componente. Pow, tudo isso pra não programar é mole? É mais fácil colocar componente e pronto né?
Gostei + 0
14/05/2007
Vitor Rubio
Gratuitos sem código fonte --> um terror, afaste-se deles, nunca use, fique longe
Pagos sem fonte --> outra droga. Perda de tempo e dinheiro. dinheiro jogado no lixo, sem garantia de atualização
Gratuitos com fonte (open-source) --> são ótimos, um bom exemplo é a JEDI. qulquer coisa, você mesmo pode alterar o fonte e atualizar. Você ainda pode colaborar com o projeto disponibilizando suas alterações.
Pagos com fonte --> embora não sejam livres, permitem a atualização/alteração/adaptação contanto que não sejam indevidamente distribuidos. A empresa que o fez garante a atualização, os testes, a manutenção e a correção de bugs, ou seja, assegura o funcionamento. Se por acaso a empresa fechar você fica com os fontes para fazer seu proprio componente. É um dos melhores tipos na minha opinião.
Mesmo assim, o delphi já vem com alguns componentes de terceiros instalados, para efeito de propaganda, que se você pensar que são compoentes do delphi e usar, já era, vc não migra mais. É o caso do quick report, rave report e paleta NM (nmftp, nmhttp etc).
Melhor que seu gerenciador de relatorios seja sempre comprado de terceiros com fontes. Os melhores na minha opinião são report builder e fast reports, mas dentre estes o fast report é fenomenal, sem comparações.
Mesmo com tudo isso de componentes disponíveis, eu acho que quem mais usa os componentes são aqueles que os criaram. Digo isso porque dente os mais de 1000 componentes da JEDI, uso apenas 3, fora um componente de criptografia (turbo-power lock box), compressão (zip master) e syntax-highlight (synedit), e um componente feito por mim.
não acredito que seja sonho, pois algumas empresas, inclusive um colega meu, substituem todos os componentes do delphi, ou de terceiros comprados, por componentes próprios, mesmo que sejam descendente deles, só para manter o mesmo componente (interface) externo. Se um dia mudar a base (biblioteca de componentes), é só mudar os ancestrais (de quem os componentes proprios herdam).
Gostei + 0
14/05/2007
Adriano Santos
não acredito que seja sonho, pois algumas empresas, inclusive um colega meu, substituem todos os componentes do delphi, ou de terceiros comprados, por componentes próprios, mesmo que sejam descendente deles, só para manter o mesmo componente (interface) externo. Se um dia mudar a base (biblioteca de componentes), é só mudar os ancestrais (de quem os componentes proprios herdam).[/quote:5eef0b003a]
Sonho sim cara, se olhar nosso projeto vai chorar de raiva. E o pior que tenho um programador aqui que tudo que vem enfia um componente de terceiro. Minha idéia é fazer uma paleta de componentes só nossa e incluir no projeto, assim a tecnologia fica em casa.
Qto a relatórios: usamos o RDPrint pq a maior dos nossos clientes usa matricial, então atende. E como o RDPrint tem uma boa visualização e impressão pelo modo gráfico tb ficamos com ele. R$ 90,00 de licença vale a pena. Agora, o cara colocar um TwwQuery ou TwwDataSource (InfoPower). Se vc olhar não tem nada de diferente.
Gostei + 0
14/05/2007
Vitor Rubio
Bom, Adriano, o problema da sua empresa é mais profundo. É tanto estrutural como de falta de comunicação. Também já vi programadores que aparecem do nada com uma penca de componentes que vc nunca viu na vida e enfia eles no programa. Isso dá muita raiva, principalmente se o componente apresenta bugs. Uma vez um programador apareceu com um componente que ele fez, sem fontes, só com os dcu´s e bpl compilados.
Demorei um dia inteiro para depurar um programa, até constatar que o bug era do componente. Como o programador não acreditou que o bug era do componente, tive que criar um programa exemplo, o mais simples possivel, que usasse somente o componente do cara e mais nenhum outro para ficar evidente onde estava o problema. Aí sim o cara detectou o erro mas não conseguiu corrigir... fez um downgrade na versão do proprio componente, baixando para uma versão que funcionava.
Tive um problema assim na outra empresa onde trabalhei. Tipo, como substituir todos os ibDataSets do projeto inteiro por sqlDataset(dbxpress)?
Acho que você pode solucionar seu problema assim:
encontre compoentes pagos com fonte ou open-source que façam a mesma coisa que seus componentes.
Crie componentes dummy (falsos) que tenham o mesmo nome, metodos e propriedades que os componentes que vc já esá usando, para que tenham as mesmas interfaces.
Na hora de implementar as funcionalidades dos componentes dummy, instancie e use os componentes novos que você comprou/baixou para realizar as operações. Seus componentes antigos agora podem ser facilmente substituidos pelos dummy.
Agora, como que um combo consegue ter um botão tentro de um edit, pra mim continua sendo um mistério.
Estou postando menos no forum hoje em dia porque estou trabalhando com C# agora.... (eu sei, me vendi à M$), mas continuo usando delphi para meus hobbies e bicos ^^
Gostei + 0
14/05/2007
Adriano Santos
[/quote:56d898d3e9]
Sim, sou eu. Cara mando tanta mensagem que as vezes nem me lembro direito...rsrs. Fala o assunto que eu me lembro..hehe
[quote:56d898d3e9=´vitor^_^´]
Bom, Adriano, o problema da sua empresa é mais profundo. É tanto estrutural como de falta de comunicação. Também já vi programadores que aparecem do nada com uma penca de componentes que vc nunca viu na vida e enfia eles no programa. Isso dá muita raiva, principalmente se o componente apresenta bugs. Uma vez um programador apareceu com um componente que ele fez, sem fontes, só com os dcu´s e bpl compilados.
Demorei um dia inteiro para depurar um programa, até constatar que o bug era do componente. Como o programador não acreditou que o bug era do componente, tive que criar um programa exemplo, o mais simples possivel, que usasse somente o componente do cara e mais nenhum outro para ficar evidente onde estava o problema. Aí sim o cara detectou o erro mas não conseguiu corrigir... fez um downgrade na versão do proprio componente, baixando para uma versão que funcionava.
Tive um problema assim na outra empresa onde trabalhei. Tipo, como substituir todos os ibDataSets do projeto inteiro por sqlDataset(dbxpress)?
[/quote:56d898d3e9]
Realmente, meu problema é gravíssimo e não tem cura. Estou coordenando a equipe, mas tenho um fulano que não acata o que eu digo e quanto mais eu falo, mais o sistema fica afundado.
[quote:56d898d3e9=´vitor^_^´]
Acho que você pode solucionar seu problema assim:
encontre compoentes pagos com fonte ou open-source que façam a mesma coisa que seus componentes.
Crie componentes dummy (falsos) que tenham o mesmo nome, metodos e propriedades que os componentes que vc já esá usando, para que tenham as mesmas interfaces.
Na hora de implementar as funcionalidades dos componentes dummy, instancie e use os componentes novos que você comprou/baixou para realizar as operações. Seus componentes antigos agora podem ser facilmente substituidos pelos dummy.
Agora, como que um combo consegue ter um botão tentro de um edit, pra mim continua sendo um mistério.
Estou postando menos no forum hoje em dia porque estou trabalhando com C# agora.... (eu sei, me vendi à M$), mas continuo usando delphi para meus hobbies e bicos ^^[/quote:56d898d3e9]
Cacilda, legal essa idéia, mas não sei se é viável. Olha que o usamos na prática.
RXLib
LMD
InfoPower
OnGuarde
RDPrint
PrintFast
QuickReport
Reporter Builder
gbBoleto
Serial
IBO
VclZip
XpMenu
E fora os que estão escondidos que nem sei. Fogo.
Gostei + 0
14/05/2007
Vitor Rubio
O VCL Zip é o que? compressão zip? se for, pode substituir pelo zipmaster ou a biblioteca de compressão que vem junto com a jedi.
Aconselho você a não usar 2 geradores de relatorio ao mesmo tempo, mas usar um só.
Esses 4 eu fiquei curioso, poderia dizer pra que serve?
LMD
InfoPower
OnGuarde
xpMenu
vlw
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)