AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fokus auf Paintbox/Image setzen

Ein Thema von MaKa117 · begonnen am 20. Nov 2010 · letzter Beitrag vom 20. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
MaKa117

Registriert seit: 20. Nov 2010
6 Beiträge
 
#1

Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:22
Hi,

ich habe ein kleines Problem: Ich bin gerade dabei, Snake zu programmieren und wollte eigentlich noch Buttons hinzufügen, die das Spiel stoppen, usw. Das Problem ist nur, dass man ja auf ein Image keinen Fokus legen kann. Bei der Paintbox sieht es ja leider genau so aus.
Das heißt, dass, wenn ich einen Button auf Enabled true setze, ist der Fokus automatisch auf diesem und das Spiel funktioniert nicht.
Kann mir vielleicht einer von euch weiterhelfen?

Gruß

MaKa117
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:24
Es kommt erst mal drauf an, wie du die Pfeiltasten erkennst und damit die Schlange bewegst. Setzt du bei einer Form KeyPreview auf true, dann kannst du mit OnKeyPress die Tasten global für die Form abfangen und abfragen, egal ob der Fokus auf einem Button oder in einem Edit liegt.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
MaKa117

Registriert seit: 20. Nov 2010
6 Beiträge
 
#3

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:27
Ich rufe das ganze per FormKeyDown ab. wenn ich jetzt im FormCreate KeyPreview := true ergänze, klappt das ganze trotzdem nicht.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:28
Zeig doch mal die wichtigen Stellen, wie du das ganze denn überhaupt machst.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
MaKa117

Registriert seit: 20. Nov 2010
6 Beiträge
 
#5

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:30
Also: hier das FormKeyDown
Code:
procedure TF_Snake.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    vk_Space:
    begin
      Timer1.Enabled := not Timer1.Enabled;
      if Timer1.Enabled = false then F_Snake.Caption := 'Snake - Um zu starten, drücke Leertaste';
      if Timer1.Enabled = true then F_Snake.Caption := 'Snake - Um zu pausieren, drücke Leertaste';
    end;
    vk_Up : step := 1;
    vk_Right : step := 2;
    vk_Left : step := -2;
    vk_Down : step := -1;
  end;
end;
das wird dann in der Unit Steuerung so umgesetzt:

Code:
procedure TSteuerung.BewegeSnake(move: integer);
var XKopf, YKopf, XApfel, YApfel: integer;
begin
  Spielfeld.LadeBild;
  step := move;
  Snake.Bewegen(move);
  Treffer := Snake.Kollision;
  xKopf := Snake.GetXPosition(0);
  YKopf := Snake.GetYPosition(0);
  XApfel := Apfel.GetXPosition;
  YApfel := Apfel.GetYPosition;
  if (xKopf = xApfel) and (YKopf = YApfel) then
  begin
    Snake.Wachsen;
    inc(Score);
    Panel1.Caption := 'Score: ' + IntToStr(Score);
    SetzeApfel;
    Apfel.Zeigen;
  end;
  Snake.Zeigen;
  Apfel.Zeigen;
end;
und dann hier in der Unit Snake

Code:
procedure TSnake.Bewegungsvorgang;
begin
  case Step of
    1: Teile[0].SetXYPosition(Teile[0].GetXPosition,Teile[0].GetYPosition-20);
    2: Teile[0].SetXYPosition(Teile[0].GetXPosition+20,Teile[0].GetYPosition);
    -2: Teile[0].SetXYPosition(Teile[0].GetXPosition-20,Teile[0].GetYPosition);
    -1: Teile[0].SetXYPosition(Teile[0].GetXPosition,Teile[0].GetYPosition+20);
  end;
  if Teile[0].GetXPosition = Breite then Teile[0].SetXYPosition(0,Teile[0].GetYPosition);
  if Teile[0].GetXPosition < 0 then Teile[0].SetXYPosition(Breite-20,Teile[0].GetYPosition);
  if Teile[0].GetYPosition = Hoehe then Teile[0].SetXYPosition(Teile[0].GetXPosition,0);
  if Teile[0].GetYPosition < 0 then Teile[0].SetXYPosition(Teile[0].GetXPosition,Hoehe-20);
end;

Geändert von mkinzler (20. Nov 2010 um 18:31 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:37
Oha, da hab ich mich wohl geirrt, das kommt aus der Delphi-Hilfe:
Zitat:
Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, Pfeiltasten usw.), da diese keine Tastaturereignisse auslösen. Ähnliches gilt, wenn eine Schaltfläche den Fokus hat oder wenn dessen Eigenschaft Default den Wert true hat. Die Eingabetaste wird von KeyPreview nicht berücksichtigt, da diese kein Tastaturereignis auslöst.
Dann musst wohl auf Windows-Messages ausweichen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
MaKa117

Registriert seit: 20. Nov 2010
6 Beiträge
 
#7

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:38
Oder ich würde es auf W-A-S-D setzen. Oder?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:38
Die einfachste Lösung ist wenn Du statt des Buttons einen Speedbutton nimmst, und bei Key=13 diese auslöst.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
MaKa117

Registriert seit: 20. Nov 2010
6 Beiträge
 
#9

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:44
Ah, so klappts.
Jetzt noch eine Frage: Kann man so etwas auch für ComboBoxes und ScrollBars einrichten?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: Fokus auf Paintbox/Image setzen

  Alt 20. Nov 2010, 18:49
Wenn Du Wincontrols benötigst dann kanst Du Dir hiermit behelfen....
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if msg.message=wm_keyDown then
      begin
        MeineAktionMit(msg.wParam);
        handled := true;
      end;
end;
Du kannst dann auch Buttons nehmen und wertest OnKeyDown nicht mehr aus...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz