[Delphi] '+' als functietoets, maar geeft ook normale waarde

Pagina: 1
Acties:

  • REDFISH
  • Registratie: Augustus 2001
  • Laatst online: 13-07 15:20

REDFISH

beetje vreemd en niet lekker

Topicstarter
Ik wil voor het gemak in mijn programma de toets numpad + de functie van tab geven.

Ik heb dit zo gedaan:

Delphi:
1
2
3
4
5
6
7
8
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = vk_add then

  begin
SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
  end;


ik heb het al geprobeerd door key op 0 te zetten. Maar dit biedt geen soelaas.

Hij springt mooi naar de volgende edit, maar hij typt dus ook nog een +, hoe kan ik dit uitzetten?

Ok sorry voor topic, de key := 0 moest dus in de keypressed handler en niet de keydown. Heb het dus al.

Ok ik heb dus een ander probleem. Ik heb nu

Delphi:
1
2
3
4
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
    key := #0;
end;

maar nu doet geen enkele key het meer.

Delphi:
1
2
3
4
5
6
7
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (key = char(vk_add)) then
    begin
    key := #0;
    end;
end;


En als ik er dit van maak, dan krijg ik weer een +

[ Voor 48% gewijzigd door REDFISH op 16-07-2003 00:31 ]


  • VisionMaster
  • Registratie: Juni 2001
  • Laatst online: 18-07 20:32

VisionMaster

Security!

gelijk de Key op 0 zetten.
vlak nadat de key als vk_add is ontdekt

[ Voor 5% gewijzigd door VisionMaster op 16-07-2003 00:25 ]

I've visited the Mothership @ Cupertino


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Hele vreemde topictitle (niet functie toets een functie maar typt ook! :S) inclusief MSN-smilie, heel vreemd topic, heel raar geheel.
Al met al blijkt dit dus een search-topic te zijn... Dacht ik nuttig te kunnen zijn met mijn key := 0. ;)

[ Voor 8% gewijzigd door OZ-Gump op 16-07-2003 00:39 . Reden: Valt tegen ]

My personal website


Verwijderd

Helaas VisionMaster, in dit geval is dat niet voldoende. Je zult hier ook de OnKeyPress af moeten vangen (vraag me niet waarom...).

De volgende constructie werkt:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  IgnoreKey: boolean = False;
//
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Shift = []) and (Key = VK_ADD) then begin
    Key := 0;
    IgnoreKey := True;
    SelectNext(ActiveControl, True, True);
  end;
end;
//
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if IgnoreKey then
    Key := #0;
  IgnoreKey := False;
end;

Gooi maar 's een paar edit controls op een form (wel KeyPreview aanzetten, maar da's basic) en laat bovenstaand OnKeyPress event weg, en je zult zien dat er netjes ge-tabt wordt, maar dat het edit control waar 'ie vandaan komt opeens een '+' bevat.

[ Voor 17% gewijzigd door Verwijderd op 16-07-2003 01:42 ]


  • REDFISH
  • Registratie: Augustus 2001
  • Laatst online: 13-07 15:20

REDFISH

beetje vreemd en niet lekker

Topicstarter
Nou een search topic, misschien, alleen duurde het al 5 minuten voordat ik vond dat je vk_codes moest gebruiken. Waarop ik gekomen ben zonder te zoeken op de titel die je verwacht. En verder was het dan nog es 5 minuten werk om te vinden hoe je de tab functie aan een andere toets koppelt. Ik vind dat ik dan toch in ieder geval de moeite gedaan heb als ik ook google uitgepluisd heb. Het probleem is dat ik als delphi newbie blijkbaar de juiste termen niet weet om een fatsoendelijke search uit google te krijgen. Keypress daar kom ik dan nog wel op, maar Twincontrol had ik geen weet van, wat dat doet, dus hoe kan ik daar dan op zoeken? Ook de search van tweakers zou wel iets uitgebreider mogen, zoals alleen zoeken in titel topics ofzo.

Maar goed, afterlife in ieder geval bedankt voor de oplossing.

Weet trouwens iemand waarom de ene keer key van type word is en de andere keer van char? Ik vind dit niet echt logisch.

En de titel: ik wil een functie toewijzen aan een niet functie toets (dus geen ctrl of tab of alt ofzo) maar die toets blijft ook typen. Dat bedoelde ik dus.

[ Voor 8% gewijzigd door REDFISH op 16-07-2003 12:32 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dat heeft te maken met de manier waarop windows toetsaanslagen afhandelt. Via OnKeyPress kan je lang niet alle toetsaanslagen afvangen. Speciale toetsen zoals F5 en TAB komen er nooit aan. In de help van OnKeyDown/Up staat duidelijk dat die virtuel key codes krijgt en een verwijzing naar de codes. Dat werkt ook gewoon bij een afgeleide van TWinControl zoals TForm. In de OnKeyDown/Up kan je ook de ShiftState opvragen waaruit je kan vinden of de ctrl, alt of shift ingedrukt is. Of zie GetKeyState.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1