/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
OnKeyDown event v/ F1, F2, <ENTER> osv
Fra : Alex B. P.


Dato : 21-02-01 04:37

Hej NG !

Jeg har prøvet flere metoder til at fange / lave en lille
event-handler-rutine, så jeg kan fange tastatur-tryk på funktions-tasterne
<F1> .. <F10> og <ENTER>.
(De skal bruges til at kalde noget simple ShowModal og Close til at
åbne/lukke forme i stedet for muse-klik.)

.... har sat KeyPreview := True; v/ OnFormCreate, men ak nej ...

Har I nogle bud ?? Noget kode der klarer ovenstående ?

Mvh

Alex

P.S. I må meget gerne maile noget "sovs" direkte ... (IKKE *.exe-filer)

----uddrag af kode---->

unit bMain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Menus, ToolWin, ComCtrls, bIndskrivning, ActnList,
StdActns;

type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
IndskrivningButton: TButton;
Om1: TMenuItem;
N1: TMenuItem;
Om2: TMenuItem;
Button1: TButton; // Ja jeg ved godt det ikke er sigende, MEN det er
..... throw-away-prototyping
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
Label1: TLabel;
Bevel1: TBevel;
Button7: TButton;
Filer1: TMenuItem;
Blabl1: TMenuItem;
N2: TMenuItem;
Afslutprogram1: TMenuItem;
F1Contexthjlp1: TMenuItem;
ActionList1: TActionList;
HelpOnHelp1: THelpOnHelp;
HelpContents1: THelpContents;
procedure Om2Click(Sender: TObject);
procedure Afslutprogram1Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure HelpOnHelp1Execute(Sender: TObject);
procedure IndskrivningButtonClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

uses AboutAP2; {$R *.DFM}

procedure TMainForm.FormCreate(Sender: TObject);
begin
KeyPreview := True; // Sikre at FormKeyDown's event-handler lytter efter
tastatur-tryk

end;

procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
// Test paa F1 event, nope
begin
if (shift = ([ssAlt, ssCtrl]))
then MainForm.color := clAqua;
IF (Key = VK_F1) AND (Shift = ([ssAlt, ssCtrl])) THEN
ShowMessage('Du har tastet F1');
end;

procedure TMainForm.Om2Click(Sender: TObject);
begin
ShowAboutBox;
end;

procedure TMainForm.Afslutprogram1Click(Sender: TObject);
begin
Close;
end;

procedure TMainForm.Button7Click(Sender: TObject);
begin
Afslutprogram1Click(MainForm);
end;

procedure IndskrivningButtonClick(Sender: TObject);
begin
MainForm.StatusBar1.SimpleText := 'Hoved-menu ...';

end;

procedure TMainForm.HelpOnHelp1Execute(Sender: TObject);
begin
ShowMessage('help ,,,,');
end;

procedure TMainForm.IndskrivningButtonClick(Sender: TObject);
begin
IndskrivningForm.Show;
end;

procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
begin
if (Key=VK_ESCAPE) then
begin
ShowMessage('YES');
end;
end;

end.



 
 
Thomas Rose (21-02-2001)
Kommentar
Fra : Thomas Rose


Dato : 21-02-01 16:10

Hej Alex,

en simpel, men måske ikke helt korret metode, kunne være at oprette en
TActionList (findes som Design-time komponent), og tilføje en række actions
svarende til de genvejstaster, du ønsker at fange... og så herefter sætte de
forskellige Actions shortcut property til de aktuelle shortcuts... hvis de
skal udføre samme kode, kan de forskellige Actions OnExecute eventhandler
bare sættes til den samme...

Håber det kan bringe dig videre... hvis min forklaring ikke giver mening, så
skriv tilbage... så ser vi på det.

- Thomas

"Alex B. P." <alexbp@vip.cybercity.dk> wrote in message
news:96vd5p$30e6$2@news.cybercity.dk...
> Hej NG !
>
> Jeg har prøvet flere metoder til at fange / lave en lille
> event-handler-rutine, så jeg kan fange tastatur-tryk på funktions-tasterne
> <F1> .. <F10> og <ENTER>.
> (De skal bruges til at kalde noget simple ShowModal og Close til at
> åbne/lukke forme i stedet for muse-klik.)
>
> ... har sat KeyPreview := True; v/ OnFormCreate, men ak nej ...
>
> Har I nogle bud ?? Noget kode der klarer ovenstående ?
>
> Mvh
>
> Alex
>
> P.S. I må meget gerne maile noget "sovs" direkte ... (IKKE *.exe-filer)
>
> ----uddrag af kode---->
>
> unit bMain;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
> ExtCtrls, StdCtrls, Menus, ToolWin, ComCtrls, bIndskrivning, ActnList,
> StdActns;
>
> type
> TMainForm = class(TForm)
> MainMenu1: TMainMenu;
> IndskrivningButton: TButton;
> Om1: TMenuItem;
> N1: TMenuItem;
> Om2: TMenuItem;
> Button1: TButton; // Ja jeg ved godt det ikke er sigende, MEN det er
> .... throw-away-prototyping
> Button2: TButton;
> Button3: TButton;
> Button4: TButton;
> Button5: TButton;
> Button6: TButton;
> StatusBar1: TStatusBar;
> ToolBar1: TToolBar;
> Label1: TLabel;
> Bevel1: TBevel;
> Button7: TButton;
> Filer1: TMenuItem;
> Blabl1: TMenuItem;
> N2: TMenuItem;
> Afslutprogram1: TMenuItem;
> F1Contexthjlp1: TMenuItem;
> ActionList1: TActionList;
> HelpOnHelp1: THelpOnHelp;
> HelpContents1: THelpContents;
> procedure Om2Click(Sender: TObject);
> procedure Afslutprogram1Click(Sender: TObject);
> procedure Button7Click(Sender: TObject);
> procedure FormCreate(Sender: TObject);
> procedure HelpOnHelp1Execute(Sender: TObject);
> procedure IndskrivningButtonClick(Sender: TObject);
> procedure FormKeyDown(Sender: TObject; var Key: Word;
> Shift: TShiftState);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> MainForm: TMainForm;
>
> implementation
>
> uses AboutAP2; {$R *.DFM}
>
> procedure TMainForm.FormCreate(Sender: TObject);
> begin
> KeyPreview := True; // Sikre at FormKeyDown's event-handler lytter efter
> tastatur-tryk
>
> end;
>
> procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
> // Test paa F1 event, nope
> begin
> if (shift = ([ssAlt, ssCtrl]))
> then MainForm.color := clAqua;
> IF (Key = VK_F1) AND (Shift = ([ssAlt, ssCtrl])) THEN
> ShowMessage('Du har tastet F1');
> end;
>
> procedure TMainForm.Om2Click(Sender: TObject);
> begin
> ShowAboutBox;
> end;
>
> procedure TMainForm.Afslutprogram1Click(Sender: TObject);
> begin
> Close;
> end;
>
> procedure TMainForm.Button7Click(Sender: TObject);
> begin
> Afslutprogram1Click(MainForm);
> end;
>
> procedure IndskrivningButtonClick(Sender: TObject);
> begin
> MainForm.StatusBar1.SimpleText := 'Hoved-menu ...';
>
> end;
>
> procedure TMainForm.HelpOnHelp1Execute(Sender: TObject);
> begin
> ShowMessage('help ,,,,');
> end;
>
> procedure TMainForm.IndskrivningButtonClick(Sender: TObject);
> begin
> IndskrivningForm.Show;
> end;
>
> procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift:
> TShiftState);
> begin
> if (Key=VK_ESCAPE) then
> begin
> ShowMessage('YES');
> end;
> end;
>
> end.
>
>



Alex B. P. (22-02-2001)
Kommentar
Fra : Alex B. P.


Dato : 22-02-01 01:13

Tusind tak ! (TActionList var MÅDEN !!!)

Jeg har prøvet begge forslag (1,2) øverst i denne tråd - MEN dit var det
bedste, idet man lettere overskueligt kan grabbe nogle keystrokes, som
hermed kan defineres forskelligt pr. form, således F-tasterne kører
uafhængigt - ret smart ....

Mange tak

Mvh

Alex B. Pedersen


Thomas Rose <thr@intellix.com> skrev i en
nyhedsmeddelelse:3a93da37$0$25921$4d4eb98e@news.dk.uu.net...
> Hej Alex,
>
> en simpel, men måske ikke helt korret metode, kunne være at oprette en
> TActionList (findes som Design-time komponent), og tilføje en række
actions
> svarende til de genvejstaster, du ønsker at fange... og så herefter sætte
de
> forskellige Actions shortcut property til de aktuelle shortcuts... hvis de
> skal udføre samme kode, kan de forskellige Actions OnExecute eventhandler
> bare sættes til den samme...
>
> Håber det kan bringe dig videre... hvis min forklaring ikke giver mening,

> skriv tilbage... så ser vi på det.
>
> - Thomas
>
> "Alex B. P." <alexbp@vip.cybercity.dk> wrote in message
> news:96vd5p$30e6$2@news.cybercity.dk...
> > Hej NG !
> >
> > Jeg har prøvet flere metoder til at fange / lave en lille
> > event-handler-rutine, så jeg kan fange tastatur-tryk på
funktions-tasterne
> > <F1> .. <F10> og <ENTER>.
> > (De skal bruges til at kalde noget simple ShowModal og Close til at
> > åbne/lukke forme i stedet for muse-klik.)
> >
> > ... har sat KeyPreview := True; v/ OnFormCreate, men ak nej ...
> >
> > Har I nogle bud ?? Noget kode der klarer ovenstående ?
> >
> > Mvh
> >
> > Alex
> >
> > P.S. I må meget gerne maile noget "sovs" direkte ... (IKKE
*.exe-filer)
> >
> > ----uddrag af kode---->
> >
> > unit bMain;
> >
> > interface
> >
> > uses
> > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
> Dialogs,
> > ExtCtrls, StdCtrls, Menus, ToolWin, ComCtrls, bIndskrivning, ActnList,
> > StdActns;
> >
> > type
> > TMainForm = class(TForm)
> > MainMenu1: TMainMenu;
> > IndskrivningButton: TButton;
> > Om1: TMenuItem;
> > N1: TMenuItem;
> > Om2: TMenuItem;
> > Button1: TButton; // Ja jeg ved godt det ikke er sigende, MEN det
er
> > .... throw-away-prototyping
> > Button2: TButton;
> > Button3: TButton;
> > Button4: TButton;
> > Button5: TButton;
> > Button6: TButton;
> > StatusBar1: TStatusBar;
> > ToolBar1: TToolBar;
> > Label1: TLabel;
> > Bevel1: TBevel;
> > Button7: TButton;
> > Filer1: TMenuItem;
> > Blabl1: TMenuItem;
> > N2: TMenuItem;
> > Afslutprogram1: TMenuItem;
> > F1Contexthjlp1: TMenuItem;
> > ActionList1: TActionList;
> > HelpOnHelp1: THelpOnHelp;
> > HelpContents1: THelpContents;
> > procedure Om2Click(Sender: TObject);
> > procedure Afslutprogram1Click(Sender: TObject);
> > procedure Button7Click(Sender: TObject);
> > procedure FormCreate(Sender: TObject);
> > procedure HelpOnHelp1Execute(Sender: TObject);
> > procedure IndskrivningButtonClick(Sender: TObject);
> > procedure FormKeyDown(Sender: TObject; var Key: Word;
> > Shift: TShiftState);
> > private
> > { Private declarations }
> > public
> > { Public declarations }
> > end;
> >
> > var
> > MainForm: TMainForm;
> >
> > implementation
> >
> > uses AboutAP2; {$R *.DFM}
> >
> > procedure TMainForm.FormCreate(Sender: TObject);
> > begin
> > KeyPreview := True; // Sikre at FormKeyDown's event-handler lytter
efter
> > tastatur-tryk
> >
> > end;
> >
> > procedure FormKeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState);
> > // Test paa F1 event, nope
> > begin
> > if (shift = ([ssAlt, ssCtrl]))
> > then MainForm.color := clAqua;
> > IF (Key = VK_F1) AND (Shift = ([ssAlt, ssCtrl])) THEN
> > ShowMessage('Du har tastet F1');
> > end;
> >
> > procedure TMainForm.Om2Click(Sender: TObject);
> > begin
> > ShowAboutBox;
> > end;
> >
> > procedure TMainForm.Afslutprogram1Click(Sender: TObject);
> > begin
> > Close;
> > end;
> >
> > procedure TMainForm.Button7Click(Sender: TObject);
> > begin
> > Afslutprogram1Click(MainForm);
> > end;
> >
> > procedure IndskrivningButtonClick(Sender: TObject);
> > begin
> > MainForm.StatusBar1.SimpleText := 'Hoved-menu ...';
> >
> > end;
> >
> > procedure TMainForm.HelpOnHelp1Execute(Sender: TObject);
> > begin
> > ShowMessage('help ,,,,');
> > end;
> >
> > procedure TMainForm.IndskrivningButtonClick(Sender: TObject);
> > begin
> > IndskrivningForm.Show;
> > end;
> >
> > procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift:
> > TShiftState);
> > begin
> > if (Key=VK_ESCAPE) then
> > begin
> > ShowMessage('YES');
> > end;
> > end;
> >
> > end.
> >
> >
>
>







Claus Christiansen (21-02-2001)
Kommentar
Fra : Claus Christiansen


Dato : 21-02-01 15:46

"Alex B. P." <alexbp@vip.cybercity.dk> wrote in message
news:96vd5p$30e6$2@news.cybercity.dk...
> Jeg har prøvet flere metoder til at fange / lave en lille
> event-handler-rutine, så jeg kan fange tastatur-tryk på funktions-tasterne
> <F1> .. <F10> og <ENTER>.
>
> ... har sat KeyPreview := True; v/ OnFormCreate, men ak nej ...
>

<klip en hel masse>

> procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
> // Test paa F1 event, nope
> begin
> if (shift = ([ssAlt, ssCtrl]))
> then MainForm.color := clAqua;
> IF (Key = VK_F1) AND (Shift = ([ssAlt, ssCtrl])) THEN
> ShowMessage('Du har tastet F1');
> end;

> procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift:
> TShiftState);
> begin
> if (Key=VK_ESCAPE) then
> begin
> ShowMessage('YES');
> end;
> end;

Hvis vi nu siger at du i virkeligheden gerne ville have udført den øverste
version når der trykkes en tast og ikke den nederste, så kunne det være
løsningen.

Sagt på en anden måde den øverste metode tilhører ikke klassen TFormMain,
men derimod blot en almindelig procedure (mangler TFormMain. foran
metodenavnet), der ligger i samme unit som klassen. Dermed vil du ikke kunne
tilknytte den som en event på formen.

Claus
--
Claus Christiansen <cch@unipeople.dk>

Pythia: http://www.pythia.dk
Personal: http://www.bigfoot.com/~kruc
============================================-------------------------
"Gravitation can not be held responsible for people falling in love"
A. Einstein



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste