Entwickler-Ecke

Multimedia / Grafik - Mauszeiger per Pfeiltasten bewegen


TomPIII866 - Do 28.08.08 14:43
Titel: Mauszeiger per Pfeiltasten bewegen
Hallo,

ich habe ein kleines Problem.
Und zwar habe ich ein Formular mit mehreren TButtons TPageControls.
Außerdem befindet sich ein TImage im Formular.
Wenn sich der Mauszeiger innerhalb des TImage befindet, dann soll der Nutzer den Mauszeiger auch mittels der Pfeiltasten bewegen können. Aber eben nur, wenn sich der Mauszeiger innerhalb des Image befindet. ;)

Habe es wie folgt programmiert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure Tfrm_haupt.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if inside_farbdruck = True then
    begin
      if key = VK_LEFT then
        SetCursorPos(Mouse.CursorPos.X - 1, Mouse.CursorPos.Y);
      if key = VK_RIGHT then
        SetCursorPos(Mouse.CursorPos.X + 1, Mouse.CursorPos.Y);
      if key = VK_UP then
        SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y - 1);
      if key = VK_DOWN then
        SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y + 1);
    end;
end;

procedure Tfrm_haupt.img_welle_farbdruckMouseEnter(Sender: TObject);
begin
  inside_farbdruck := True;
//Cursor-Form setzen
  img_welle_farbdruck.Cursor := crCross;
end;

procedure Tfrm_haupt.img_welle_farbdruckMouseLeave(Sender: TObject);
begin
  inside_farbdruck := False;
//Rücksetzen des Cursors
  img_welle_farbdruck.Cursor := crDefault;  
end;




Das geht soweit auch, nur leider passiert es manchmal, dass nicht der Mauszeiger bewegt wird, sondern der Fokus auf den Buttons springt, wenn man die Pfeiltasten drückt. Oder die PageControls durchgeschaltet werden.

Habe dann gedacht: "gut, dann nehme ich nicht die Pfeiltasten, sondern, A, S, D, W".
Habe dann die Virtual Key Codes durchgeschaut und für A wäre es dann:


Delphi-Quelltext
1:
2:
if key = (41then
  SetCursorPos(Mouse.CursorPos.X - 1, Mouse.CursorPos.Y);


Aber das geht gar nicht, beim Debuggen habe ich gesehen, dass er die if-Anweisung einfach überspringt.

Wie kann ich das Problem denn am Besten lösen?

Danke für eure Tipps! :)
Tom


TomPIII866 - Do 28.08.08 15:05

Ein weiteres Problemchen hätte ich noch:
Und zwar habe ich einen SaveDialog. Dort möchte ich den eingegebenen Dateinamen auslesen.
Aber ohne das komplette Verzeichnis. Nur den Dateinamen.

Mit

Delphi-Quelltext
1:
dateiname := SaveDialog1.FileName;                    

bekomme ich ja das komplette Verzeichnis mit Dateiname.


EDIT:
Gefunden:

Delphi-Quelltext
1:
dateiname := ExtractFileName(dlg_open.FileName);                    


Tilman - Do 28.08.08 15:22

ups zu langsam ^^


TomPIII866 - Do 28.08.08 16:40

Okay....Problem auch gelöst. Hab ein KeyPress-Ereignis draus gemacht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure Tfrm_haupt.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if inside_farbdruck = True then
    begin
      if key = 'a' then
        SetCursorPos(Mouse.CursorPos.X - 1, Mouse.CursorPos.Y);
      if key = 'd' then
        SetCursorPos(Mouse.CursorPos.X + 1, Mouse.CursorPos.Y);
      if key = 'w' then
        SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y - 1);
      if key = 's' then
        SetCursorPos(Mouse.CursorPos.X, Mouse.CursorPos.Y + 1);
    end;
end;