![]() |
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: |
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. |
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? |
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.
|
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 : ![]() |
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.
|
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: |
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:
realisieren.
if Sender=ImageTurm then
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; |
AW: images bewegen mit maus delphi
okay danke werds mal so versuchen
|
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. |
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 |
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. |
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
|
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
|
AW: images bewegen mit maus delphi
Hübsch und elegant einfach!
|
AW: images bewegen mit maus delphi
@ConnorMcLeod
danke :oops: und Gruß zurück ... |
AW: images bewegen mit maus delphi
@bummi danke hast mir echt weitergeholfen :thumb:
|
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! |
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 21:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz