Obsługa Keypress - sprawdzenie czy podano literkę "a"

0

Siemka
Chcę przypisać Klawisz do kodu z buttona tu miała by być to literka a ale w jednych kodach w necie jest to #65 w innych #41 to moje początki ztąd nie wszystko jeszcze ogarniam

procedure TForm2.Button6KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #65 then
  Button6Click(self);
end;

Procedura ButtonClick jest poprawna a tu nie działa co zrobiłem źle
Key Preview dla formy jest na True

Drugie pytanie jeśli chciałbym usunąć buton i przypisać sam kod pod klawisz klawiatury.
jak to zrobić tworzyć nową procedurę? i jak taki kod miałby wyglądać ?
powiedzmy że pokazywał by się napis TEdit w TLabel po naciśnięciu ENTER

1

Mała literka a ma kod ASCII równy 97, natomiast duża A to kod 65; Sugeruję wyszukanie w sieci tabelki z kodami i pobranie jej na dysk - zapewne przyda się niejeden raz, więc dobrze ją mieć pod ręką; Wspomnę też, że znajomość kodów znaków w Twoim przypadku jest zbędna, bo możesz porównać zmienną do literału:

if Key = 'a' then

Druga sprawa - w jakim celu obsługujesz zdarzenie OnKeyPress dla przycisku?


Przy okazji:

Button6Click(self);

Tak się nie robi - Sender zdarzenia OnClick powinien zawierać referencję klikniętego przycisku, a nie formularza:

Button6Click(Button6);

Jeśli wywołanie tego zdarzenia nie wymaga przekazania obiektu innego przycisku to korzystaj z metody Click:

Button6.Click();

Poza tym nazwij sensownie formularz i komponenty.

0

I tak to jest wszędzie w necie opisane jak piszesz.
Dlatego zanim zadałem głupie pytanie poszukałem.

Lecz jakkolwiek zrobię

Button6Click(Button6);

czy tak:

Button6.Click();

Wywala błąd
**Not enough actual parameters
**w powyższej linii

Kod który ma się wykonać po wciśnięciu klawisz a:

procedure TForm2.Button6Click(Sender: TObject);
var
  i: Integer;
begin
  i := ListBox1.ItemIndex;
  if i > 0 then
    ListBox1.Items.Exchange(i, i - 1);
end;

0

Bzdury odowiadasz - metoda Click nie może powodować błędu not enough actual parameters, bo jest metodą bezparametrową i zawsze nią była - Vcl.StdCtrls.TCustomButton.Click;

Natomiast zdarzenie OnClick zawsze posiadało i posiada tylko jeden parametr (bo jest typu TNotifyEvent), więc jego wywołanie również jest składniowo prawidłowe i również nie spowoduje wspomnianego błędu kompilacji - Vcl.StdCtrls.TButton.OnClick;

Na pewno błąd ten powoduje zupełnie inna linijka, więc sprawdź dobrze.

0

Chciałbym się mylić ale niestety nie.
Słabo jeszcze znam delphi
Ale wystarczająco by zobaczyć co jest na czerwonej linii i sprawdzić co pisze w oknie messages i o której linii mowa.
Więc podkreśla tą linię z takim właśnie błędem:

Button6.Click();

Wywala błąd
**Not enough actual parameters
**
I to jest jedyny błąd w programie

0

Pokaż zrzut ekranu - albo coś pomieszałeś, albo używasz Delphi starszego ode mnie.

0

W linku jest zrzut ekranu

zrzut.jpg

0

No przecież używasz handlera OnClick, a nie metody Click! Prosiłem Cię wcześniej, żebyś to dokładnie sprawdził...

Albo skorzystaj ze zdarzenia OnClick w taki sposób:

Button1Click(Button1);

czy tam taki:

Button1Click(nil);

albo z metody Click w taki sposób:

Button1.Click();
0

Przecież tam jest Button1Click an powinno być Button1.Click

0

Wybacz dziękuje :)
Polać mu :)

0

Jeszcze jedno pytanie działa super dziękuję.
tylko by wykonywał swój kod muszę aktywować ten buton (raz w niego kliknąć)

Jak zrobić by kod działał odkąd zaznaczymy listboxa tak wiem wtedy to nie będzie buton click

Góra Sterowanie literka -q

var
  i: Integer;
begin
  i := ListBox1.ItemIndex;
  if i > 0 then
    ListBox1.Items.Exchange(i, i - 1);
end;

sterowanie na dół litera -a

var
  i: Integer;
begin
  i := ListBox1.ItemIndex + 1;
  if i < ListBox1.Items.Count then
    ListBox1.Items.Exchange(i, i - 1);
end;

Dodatkowo mam kilka Listboxów ale tylko w jednym aktywny Select:

procedure UnselectLastSelectedItem(AListBox: TListBox);
var
  LIndex: Integer;
begin
  for LIndex := AListBox.Items.Count - 1 downto 0 do
    if AListBox.Selected[LIndex] then
    begin
      AListBox.Selected[LIndex] := False;
      Exit();
    end;
end;

Jak to zrobić by sterowanie odbyło się na aktywnym zaznaczonym indeksie bez względu na którym Listboxie się znajduje.

No i by nie zakładać nowego wątku przenoszenie zaznaczenia w bok na sąsiedni Listbox za pomocą strzałek.

Jak to powinno wyglądać w całości by było jak najprościej i fachowo.
Może da się z tego wszystkiego zrobić jedną procedurę

0

Konkretne pytanie zadaj, a dostaniesz konkretną odpowiedź.

0

Sterowanie za pomocą klawiatury zaznaczeniem w kilku Listboxach.

Jak przenosić za pomocą strzałek zaznaczenie z jednego Listboxa na drugi?
tylko zaznaczenie nie zawartość

Tak samo sterowanie góra dół.
Obecnie mam że przenoszę indeksy (zawartość) góra dół

To bym chciał zrobić pod SHIFT + 'inny klawisz'
bez SHIFT chciałbym tylko zaznaczeniem sterować bez przenoszenia zawartości.

Cześć procedur mam wyżej.

Jak powinno to wyglądać złożone w całość spakowane w jedną procedurę o ile to logiczne ?

0

Sterowanie za pomocą klawiatury zaznaczeniem w kilku Listboxach.

Sterowanie klawiaturą jest już zaimplementowane - niżej lista obsługiwanych klawiszy sterujących:

  • , , , - przesuwanie zaznaczenia o jedną pozycję w górę lub w dół,
  • PageUp, PageDown - przesuwanie zaznaczenia o jeden ekran w górę lub w dół,
  • Home, End - przesunięcie zaznaczenia na początek lub koniec;

Klawisz zaznaczania jest jeden:

  • Space - zaznaczenie lub odznaczenie (jeśli trzymany jest klawisz specjalny) pozycji z ramką focusa;

Oraz lista klawiszy specjalnych:

  • Ctrl - trzymając go i naciskając klawisz sterujący, przesuwa się ramkę focusa bez utraty zaznaczenia,
  • Shift - trzymając go i naciskając klawisz sterujący, zaznacza się cały zakres (ramka focusa jest przesuwana);

Zastanów się jeszcze raz co chcesz zrobić i czy koniecznie potrzebujesz wszystko co podałaś, bo część z potrzebnych funkcji posiada już zaimplementowane zachowanie.

0

Teraz wybacz mogę troszkę pokręcić.
Tak strzałki góra dół tak o to mi chodziło.

Są trzy Lisboxy w jednym mam tylko podświetlony indeks tak ma zostać(kod wyżej)
Klikam w Listbox1 odznaczam pozostałe.
Tylko tak samo zrobić przenosić zaznaczenie strzałkami lewo prawo. Z listboxa na Listbox

oraz te procedurki:

var
  i: Integer;
begin
  i := ListBox1.ItemIndex;
  if i > 0 then
    ListBox1.Items.Exchange(i, i - 1);
end;

var
  i: Integer;
begin
  i := ListBox1.ItemIndex + 1;
  if i < ListBox1.Items.Count then
    ListBox1.Items.Exchange(i, i - 1);
end;

Jak powinien wyglądać dla nich kod by wiedziały w którym Listboxie jest aktywny Select i działały na tym aktywnym
Gdzie pod jakim keypress zrobić im skróty klawiaturowe by właśnie działały na aktywnym Listboxie

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