(Delphi) Jak wykonać akcję w memo po wciśnięciu entera , oraz jak wstawić nową linię używając entera i shifta?: Różnice pomiędzy wersjami

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania
(Utworzył nową stronę „Często zdarza się (np w komunikatorach) że po wciśnięciu entera automatycznie wysyłamy wiadomość. Operacja ta jest bardzo prosta i przyjemna zwłaszcza w delp…”)
 
m (Zastępowanie tekstu - "<source lang="delphi">" na "<pre>")
 
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika)
Linia 9: Linia 9:
Mianowicie wciskając shift + enter, dostajemy nową linię, natomiast sam enter wysyła wiadomość.  
Mianowicie wciskając shift + enter, dostajemy nową linię, natomiast sam enter wysyła wiadomość.  


<source lang="delphi">
<pre>
procedure TForm1.input_rozmowyKeyDown(Sender: TObject; var Key: Word;
procedure TForm1.input_rozmowyKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
   Shift: TShiftState);
Linia 21: Linia 21:
if Key = 13 then button2.click;
if Key = 13 then button2.click;
end;
end;
</source>
</pre>


*input_rozmowy - nazwa memo
*input_rozmowy - nazwa memo

Aktualna wersja na dzień 14:28, 18 lut 2018

Często zdarza się (np w komunikatorach) że po wciśnięciu entera automatycznie wysyłamy wiadomość.


Operacja ta jest bardzo prosta i przyjemna zwłaszcza w delphi, ale co w sytuacji kiedy użytkownik chce wstawić nową linię ?


A tutaj, potrzebujemy skorzystać z podstępu i zdefiniować ogólnie przyjęty (również i w Pidginie) wyjątek z shiftem.

Mianowicie wciskając shift + enter, dostajemy nową linię, natomiast sam enter wysyła wiadomość.

procedure TForm1.input_rozmowyKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Shift =[ssShift]) AND ( Key = 13)    then
begin
input_rozmowy.text:=input_rozmowy.text+sLineBreak;
input_rozmowy.selstart:=(input_rozmowy.GetTextLen);
end
else
if Key = 13 then button2.click;
end;
  • input_rozmowy - nazwa memo
  • button2.click - nasza procedura która ma być wykonana gdy użytkownik wciśnie enter
  • input_rozmowy.text:=input_rozmowy.text+sLineBreak; - dodaje na końcu enter
  • input_rozmowy.selstart:=(input_rozmowy.GetTextLen); - przewija na koniec memo