Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   images bewegen mit maus delphi (https://www.delphipraxis.net/168785-images-bewegen-mit-maus-delphi.html)

infofreak23 11. Jun 2012 11:40

images bewegen mit maus delphi
 
hey meine programmierfreunde,

ich habe ein kleines problem:cry: :
ich bin gerade dabei schach zu programmieren.
ich habe mein schachfeld fertig und die figuren habe ich mit images gemacht.
mein problem ist jetzt dass ich nicht weiß wie ich diese nun bewegen kann.

könnt ihr mir helfen :?:
wäre echt nett von euch ist wichtig :lol:
danke im voraus :thumb:

Bummi 11. Jun 2012 11:53

AW: images bewegen mit maus delphi
 
Der Ansatz mit mehreren Images scheint mir nicht optimal gewählt, aber wenn Du es so versuchen willst

Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls;

type
  TForm5 = class(TForm)
    Image1: TImage;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
    FMDX,FMDY:Integer;
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   FMDX := X;
   FMDY := Y;
end;

procedure TForm5.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
   if ssLeft in Shift then
      begin
        TImage(Sender).Left := TImage(Sender).Left + X - FMDX;
        TImage(Sender).Top := TImage(Sender).Top + Y - FMDY;
      end;
end;

end.

infofreak23 11. Jun 2012 13:00

AW: images bewegen mit maus delphi
 
danke schonmal für deine antwort.
was wäre denn deiner meinung nach besser geeignet anstelle von den images?

Bummi 11. Jun 2012 13:18

AW: images bewegen mit maus delphi
 
Ich würde entweder eine Komponente von TGraphicControl ableiten, oder wenn es kurz un schmerzlos gehen soll Feld und Figuren im OnPaint einer Paintbox (notfalls auch des Forms) malen, die Verwaltungsinformationen in einem Array vorhalten und Mousedown/move etc. der Paintbox/Komponete auswerten.

bernhard_LA 11. Jun 2012 15:37

AW: images bewegen mit maus delphi
 
als Ergänzung der anderen Posts :

er reicht ein TImage, in diesem Bild kannst Du Deine Figuren (sprites) über verschiedenen Funktionen ( Canvas.Paint, BitBlt, ....)
direkt zeichnen lassen. Schau dir mal folgendes Tutorial an :

http://delphi.about.com/od/gameprogr...rogramming.htm

Popov 11. Jun 2012 17:04

AW: images bewegen mit maus delphi
 
Liste der Anhänge anzeigen (Anzahl: 2)
Anbei ein kleines Beispiel wie man das Problem nur mit Bitmaps lösen kann. Es ist nichts besonderes, es sind nur fünf Bitmap-Kisten die auf einer Untegrund-Bitmap mit gedrückter Maus verschoben werden können. Alles wurde mit TBitmaps gelöst. Es ist nur etwas Rechnen nötig.

infofreak23 12. Jun 2012 13:13

AW: images bewegen mit maus delphi
 
soo vielen dank erstmal für eure antworten :)

ich habe allerdings noch ein paar fragen die noch nicht ganz verstehe.

zuerst eine frage an bummi: kann ich den quellcode den du mir geschrieben hast so wie er da steht in meinen quelltext kopieren oder muss ich da noch was ändern und wenn ja was?

außerdem frage ich mich, wie ich dass dann machen soll wenn ich möchte, dass z.B. ein turm nur auf bestimmte felder ziehen kann und wie ich die felder überhaupt einteilen kann. habe das spielfeld mit moveto und lineto auf ein TImage gemalt und die felder mit brush gefärbt.

auch wenn das vlt nicht die beste lösung ist wäre es nett wenn ihr mir schreiben könntet wie ich das umsetzen kann OHNE großartig was zu verändern sprich mit den images als spielfiguren und dem spielfeld so wie ich es oben geschrieben habe, denn mir rennt leider die zeit davon kann nur noch freitag daran arbeiten :pale:

Bummi 12. Jun 2012 13:28

AW: images bewegen mit maus delphi
 
Du musst im Objektinspektor die Ereignisse OnMouseMove und OnMouseDown versorgen.
Du kannst für alle Images dieselben Routinen verwenden, weitergehende Entscheidungen kannst Du über z.B. über
Delphi-Quellcode:
if Sender=ImageTurm then
realisieren.
Die Gültigkeit der Züge musst Du über Top / Left verifizieren, ich würde hierfür wie gesagt ein Array anlegen.
z.B.
Delphi-Quellcode:
type
TMyFieldInfo=Record
 Farbe:TColor;
 AktuelleFigur:Integer;
 //was auch immer noch
end;

TFieldArray=Array[0..7,0..7] of TMyFieldInfo;

infofreak23 12. Jun 2012 13:34

AW: images bewegen mit maus delphi
 
okay danke werds mal so versuchen

Popov 12. Jun 2012 13:43

AW: images bewegen mit maus delphi
 
Du gleitest vielleicht etwas von dem Problem ab. Du möchtest einen Kuchen backen, fragst aber gerade wie du das Wasser aus dem Wasserhahn in den Messbecher kriegst?

Ich denke du hast dir am Anfang ein großes (Grafik) Hindernis gesetzt das erst überwunden werden muß. Du hast zwei "Probleme", ein Schachspiel programmieren und umgang mit Grafik verstehen.Vielleicht ein Tipp, lass das mit der Grafik-Bewegung. Du willst den Springer bewegen, dann blinke mit ihm drei mal am Position A (jetzt) und B (gleich), dann Figur aus Position A löschen und bei B setzten. So hat man früher auch gemacht. Das ist simpler und das Grafik-Hindernis ist weg.

Wie gesagt, nur ein Tipp, spart aber etwas Zeit.

infofreak23 12. Jun 2012 13:57

AW: images bewegen mit maus delphi
 
@popov

danke für den tipp aber habe 2 fragen:

1. was spricht dagegen es so zu machen wie bummi es gesagt hat sprich was ist an deiner variante besser/einfacher
und
2. wie kann ich deine variante umsetzen

Bummi 12. Jun 2012 14:00

AW: images bewegen mit maus delphi
 
Bei "meiner" Variante musst Du permanent prüfen ob das Image sich an einer gültigen Position befindet, ist zwar per DIV Feldbreite mit einem Blick ins Array eigentlich unproblematisch, aber trotzdem.
Mit Popovs Vorschlag kannst Du Dich auf die eigentliche Spiellogik konzentrieren, was bei weitem schwieriger wird.

infofreak23 12. Jun 2012 14:08

AW: images bewegen mit maus delphi
 
naja muss mal gucken weil hab wie gesagt nur noch freitag eine stunde zeit und muss gucken dass ich noch so viel schaffe wie möglich weil alles werd ich eh nicht schaffen in der einen stunde. was würdet ihr demnach empfehlen wie ich vorgehen soll damit ich wenigstens die figuren noch einigermaßen bewegt kriege

Bummi 12. Jun 2012 15:07

AW: images bewegen mit maus delphi
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hätte hier noch einen sehr schnell umsetzbaren Ansatz mit einem Stringgrid, die Schachlogik fehlt allerdinsg

ConnorMcLeod 12. Jun 2012 15:30

AW: images bewegen mit maus delphi
 
Hübsch und elegant einfach!

Bummi 12. Jun 2012 15:45

AW: images bewegen mit maus delphi
 
@ConnorMcLeod
danke :oops: und Gruß zurück ...

infofreak23 12. Jun 2012 16:18

AW: images bewegen mit maus delphi
 
@bummi danke hast mir echt weitergeholfen :thumb:

wovo 11. Jan 2014 17:02

AW: images bewegen mit maus delphi
 
Hallo!
Ich klinke mich hier ein, da ich ein ähnliches Problem habe.
Es soll (in einem Spiel) eine Figur (dargestellt durch ein Image)
gedreht und verschoben werden können.
Für das Drehen (um 90°) verwende ich OnOuseDwon und frage die Maus ab mit mbLeft oder mbRight. Das funktioniert.
Wenn nun das Image stattdessen bewegt werden soll, war mein Ansatz über OnMouseMove und Benutzen von mbMiddle. Diese Button-Abfrage will aber Delphi nicht, da in dieser Prozedur "button" unbekannt ist.
Muss ich dann mit Tasten weitermachen? (Mausposition abfragen, Tasten abfragen, Image bewegen) Anklicken des Bildes geht ja nur über die mittlere Maustaste, da sonst Rotation erfolgt.

Dank für einen Vorschlag im voraus.

wovo

Nachtrag: Wie kann ich im Ereignis OnMuseDown z.B. über mbMiddle - Abfrage
die Mausposition (ähnlich wie GetCursorPos(p) abfragen UND den Names des jeweiligen Images? Damit wäre mein Problem gelöst!

wovo 16. Jan 2014 16:59

AW: images bewegen mit maus delphi
 
Hallo!

Problem inzwischen auf dem Lösungsweg :-)

Dank für etwaige Bemühungen.

wovo


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 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