Fórum Deixar um listbox visible ao digitar no RichEdit? #388727
18/10/2010
0
Por exemplo:
Supomos que estou digitanto um texto no richedit e a palavra é CASA
Então logo apos a palavra CASA abrir um listbox (visible).
Este listbox deve ser flexivel para sempre abrir após a palavra CASA
Adriano Dolce
Curtir tópico
+ 0Posts
18/10/2010
Eriley Barbosa
var
Linha: integer;
begin
Linha := RichEdit1.CaretPos.y;
if RichEdit1.Lines[Linha] = 'casa' then
ShowMessage('casa');
end;
Gostei + 0
18/10/2010
Adriano Dolce
var
Linha: integer;
begin
Linha := RichEdit1.CaretPos.y;
if RichEdit1.Lines[Linha] = 'casa' then
ShowMessage('casa');
end;
Código:
procedure TForm1.sListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i: Integer; begin i := sListBox.ItemIndex; if key = 13 then begin RichEdit1.Text := RichEdit1.Text + ' '+ sListBox.Items[i]; RichEdit1.Text := RichEdit1.Text + ' '; RichEdit1.SetFocus; Keybd_Event(VK_END,0,0,0); sListBox.Visible := False; end; end;
Código:
procedure TForm1.RichEdit1Change(Sender: TObject); var nPos, Linha: Integer; sTexto: String; begin With RichEdit1 do begin SetFocus; sTexto := 'casa'; nPos := FindText(sTexto, 0, Length(RichEdit1.Text), []); if nPos >= 0 then begin sListBox.Visible := True; sListBox.ItemIndex := 0; sListBox.SetFocus; end; end; end;
Mais além de não conseguir colocar o ListBox junto a palavra, depois que eu digito a palavra CASA e continuo digitando no richedit, o if nPos >= 0 then vai continuar a abrir o listbox. E quero que abra o listbox novamente somente se eu digitar de novo a palavra CASA no richedit.
Ou seja apenas quando digitar esta palavra deve abrir o listbox eu pego o que tem na lista e deixo invisivel novamente.
Gostei + 0
11/11/2010
Adriano Dolce
Gostei + 0
12/11/2010
Rodrigo Mattos
procedure TForm1.RichEdit1Change(Sender: TObject); var I: Integer; begin for I := 0 to RichEdit1.Lines.Count - 1 do begin if RichEdit1.Lines.Strings[I] = 'casa' then begin ListBox1.Visible := True; ListBox1.SetFocus; end; end; end;
Gostei + 0
07/01/2011
Adriano Dolce
procedure TForm1.RichEdit1Change(Sender: TObject); var I: Integer; begin for I := 0 to RichEdit1.Lines.Count - 1 do begin if RichEdit1.Lines.Strings[I] = 'casa' then begin ListBox1.Visible := True; ListBox1.SetFocus; end; end; end;
Gostei + 0
09/01/2011
Marco Salles
var Linha:Integer;
procedure TForm6.RichEdit1Change(Sender: TObject); var sTexto: String; begin With RichEdit1 do begin SetFocus; Linha:=Perform(EM_LINEFROMCHAR,SelStart, 0); sTexto:=Lines.Strings[Linha]; sTexto:=copy(sTexto,length(sTexto)-3,4); if sTexto = 'casa' then begin sListBox.Visible := True; sListBox.Left:=Left+ self.Canvas.TextWidth(Lines.Strings[Linha]); sListBox.top:=TOP+ (Linha)*Form6.Canvas.TextHeight(Lines.Text); sListBox.ItemIndex := 0; sListBox.SetFocus; end; end; end;
procedure TForm6.sListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i: Integer; sTexto:String; begin i := sListBox.ItemIndex; if key = 13 then begin with RichEdit1 do begin SetFocus; Lines.Strings[Linha]:= Lines.Strings[Linha]+' '+ sListBox.Items[i]+' '; Keybd_Event(VK_END,0,0,0); sListBox.Visible := False; end; end; end;
Gostei + 0
09/01/2011
Adriano Dolce
Obrigado amigo.
Gostei + 0
10/01/2011
Marco Salles
Obrigado amigo.
Gostei + 0
11/01/2011
Adriano Dolce
Obrigado amigo.
Este componente é meu, fui eu quem desenvolvi...
Sobre o richedit, eu quero fazer algo parecido com o editor do MSSQL, mais não tive tempo ainda de mecher, pois estamos desenvolvendo outra coisa na empresa, que tem prazo... Me deixando com pouco tempo disponivel.
Sabe... Estas coisas de governo, que precisa ser pra ontem ... hehehe.
Mais assim que der tempo ja vou ver este post ai pra testar, e dar continuidade.
Obrigado amigo.
Gostei + 0
11/01/2011
Marco Salles
Gostei + 0
11/01/2011
Adriano Dolce
Mas este assunto ainda é muito estenso, só que por hora vi que o que vc postou ai, esta funcionando... Obrigado amigo.
Gostei + 0
13/01/2011
Adriano Dolce
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)