Zaznaczanie tekstu z poziomu klawiatury w Memo

0

Jak zrobić by za pomocą kombinacji klawiszy CTRL+A lub CTRL+a zaznaczać cały tekst w Memo?
Znalazłem w sieci rozwiązanie tego typu:

procedure TForm1.wynikKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((ssCtrl in Shift) and (Key = 65)) then
    TMemo(Sender).SelectAll;
end;

Problem w tym, że próba wpisania "Ą" bądź "ą" w memo kończy się usunięciem tekstu przy zastosowaniu powyższego rozwiązania ;/

0

A jak chciałbyś aby to działało? To normalne zachowanie standardowych kontrolek edycyjnych, że przy zaznaczonym tekstcie, napisanie nowego usuwa zaznaczony fragment. Nie chcesz tego to jedyna możłiwość jaką widzę to właśność ReadOnly.

0

hymmm no chciałbym by CTRL+A zaznaczało tekst jednak ALT+A już nie koniecznie :)
Po co mi ReadOnly skoro to zaś nie pozwoli mi pisać? ;>

2
procedure TForm1.wynikKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Shift=[ssCtrl]) and (Key = 65)) then
    TMemo(Sender).SelectAll;
end; 
0

@olesio pytający ma inny problem. Okazuje się, że próba pisania literki ą powoduje dwa działania. Pierwsze zaznaczenie całości, drugie to wpisanie literki ą. A jak mamy zaznaczoną całość, to jest nadpisywana zawartość całego pola.

Działanie takie związane jest z tym, że w układzie klawiatury programisty litery z ogonkami piszemy poprzez prawy alt. Poczytajmy zatem nieco o tym klawiszu na wiki https://pl.wikipedia.org/wiki/AltGr

W innych układach klawiatury, przede wszystkim typowym układzie amerykańskim, prawy klawisz Alt pełni funkcję identyczną jak lewy. W systemie Windows przy układzie klawiatury „Polski programisty” AltGr odpowiada kombinacji klawiszy Ctrl + Alt, co jest niekiedy kłopotliwe, gdyż w niektórych aplikacjach, sterownikach i skrótach programów znajdujących się na pulpicie zdefiniowane są skróty klawiaturowe Alt+Ctrl+litera. Na przykład zdefiniowanie skrótu Alt+Ctrl+S może uniemożliwić wpisywanie małej litery „ś”. Dotyczy to m.in. niektórych modeli komputerów stacjonarnych HP, na których fabrycznie instalowany jest program narzędziowy korzystający z takiego właśnie skrótu.

Rozwiązaniem na to jest po prostu dołożenie odpowiedniego warunku. Wiem, że to dział Delphi, ale mam pod ręką swój kod spod C++ Builder'a pokazujący jak można to ominąć dla skrótu Crtl+S. Ale logika jest taka sama:

void __fastcall TfrmTowary::OnFormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
  switch (Key)
  {
    case 'S':
    {
      if (Shift.Contains(ssCtrl)==true && Shift.Contains(ssAlt)==false)
      {
        frmHaslo = new TfrmHaslo(this,"qaz123");
        int Res = frmHaslo->ShowModal();

        if (Res == -1)
        {
          ShowMessage("Nieprawidlowe haslo!");
        }
        else if (Res == 1)
        {
          this->vAwaria();
        }
      }
      break;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1