Hint w Memo po naciśnięciu klawisza

Hint w Memo po naciśnięciu klawisza
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak zrobić żeby po kliknięciu pewnego przycisku wyświetlał się Hint w Memo pod kurosrem, a zamykał się po kliknięciu innego przycisku ?
Mam coś takiego:

Kopiuj

procedure TForm1.SynMemo1KeyPress(Sender: TObject; var Key: WideChar);

begin
  if Key = 'a' then
  begin

    end;
  if Key = 'z' then
  begin

    end;

Próbowałem coś takiego, ale z marnym skutkiem:

Kopiuj

  SynMemo1.ShowHint:= true;
SynMemo1.Hint:= 'abcdefgh......xyz';

oraz:

Kopiuj
SynMemo1.ShowHint := false;
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
0
Kopiuj
Memo1.Hint := 'Podpowiedź';

Ustala treść podpowiedzi,natomiast

Kopiuj
Memo1.ShowHint := True

ustala czy hint ma się pokazać po najechaniu myszką.

Przejrzałem source delphi szukając czegoś o hintach, kombinowałem z procedurkami odpowiedzialnymi za poprawne wyświetlanie hintów, żeby je przerobić tak żeby działały po Twojemu, ale chyba coś słabo działałem bo do niczego nie doszedłem.

Mój jedyny pomysł jest taki

Kopiuj
procedure PokazHint(AControl: TControl) ;
var
   P: TPoint;
begin
  SynMemo1.ShowHint := True;
  SynMemo1.Hint := 'Moja super podpowiedź';
  P := AControl.ClientToScreen(Point(20, 20)) ;
  SetCursorPos(P.X, P.Y) ;
end;

Co prawda przeniesie Ci kursor nad obiekt, ale podpowiedź wyświetli.

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0

ActivateHint method (TApplication)
Displays a hint window for the control at a specified position.

Delphi syntax:

procedure ActivateHint(CursorPos: TPoint);

C++ syntax:

void __fastcall ActivateHint(TPoint CursorPos);

Description

ActivateHint locates the control or menu item at the position specified by CursorPos, where CursorPos represents a screen coordinates in pixels. After locating the control, ActivateHint displays the control’s Hint in a hint window.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
0

Czytałem właśnie o tym, i albo nie wiem jak to działa, albo po prostu nie działa tak jak sądzę.

Kopiuj
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  Application.ActivateHint(Point(20, 20));
end;

nic nie robi.

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0

Ja stosowałem ActivateHint w tego rodzaju sytuacjach:

Kopiuj
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Label1.Hint:=IntToStr(x)+' '+IntToStr(y);
  Application.ActivateHint(Point(x,y));
end;
flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
0
KrólJulian napisał(a)

Jak zrobić żeby po kliknięciu pewnego przycisku wyświetlał się Hint w Memo pod kurosrem, a zamykał się po kliknięciu innego przycisku ?

Zawsze możesz zrobić własną implementację takiego okienka; Kontrolka, która będzie wywoływać podpowiedź sprawdzałaby wartość ShowHint i tworzyła okno (w zdarzeniu OnMouseEnter), a zamykała w zdarzeniu OnMouseLeave - zdarzenia te nie występują w standardowych kontrolkach więc trzeba je dopisać; Sposób na dodanie tych zdarzeń jest opisany w Kompendium programisty - tworzenie komponentów; Do tego warto odczekać chwilkę po wprowadzeniu kursora nad komponent tak, jak to jest ze standardowymi podpowiedziami (można to oprzeć o TTimer);

  • Rejestracja: dni
  • Ostatnio: dni
0

Ja nie chce po najechaniu myszką tylko po wciśnięciu klawisza
Popróbuję z tym co mi wysłaliście, dzięki :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.