![]() |
Mapscreen - Verbesserungsvorschläge, andere Lösungsansätze?
Moin zusammen!
Ich hab vor, mir für mein neues Project einen kleinen Mapscreen für strategische Planungen zu proggen. Funktioniert alles so ziemlich. Im Grunde kann ich die Karte jetzt per drag and Drop mit der rechten Maustaste auf dem Form verschieben, und zusätzlich die karte nach allen Richtungen scrollen. (Mauszeiger außerhalb des Forms) Allerdings finde ich meinen Code nicht gerade super elegant und zweckgerichtet. *Ich denke Luckie wird sich erstmal an den Hals fassen und Aufschreien wollen* ;-) Das Ganze basiert auf der Umrechnung von Globalen Maus Coords mit der Maus-CLientcoords von Image1 und den Variablen Form1. left / with bzw. Form1. top / height. Eines stört mich allerdings, wenn ich das Bild draggen will und ich komme mit dem mauszeiger über die Fomulargrenzen hinaus, faengt er sofort an zu scrollen. ich will aber das er nur scrollt, wenn keine maustaste gedrückt ist. Dazu muesste ich den Globalen Status der Maustasten abfragen koennen und ich weis leider nicht wie. Bei den Globalen Coordinaten gibst dafür ja GetcursorPos, da ist das kein Problem. Vielleicht hatt ja jemand einen ganz anderen viel eleganteren Loesungsweg in der Hinterhand Waere nett wenn jemand Vorschläge haette. THX schonmal im vorraus. Mein BeispielProject ist im Anhang
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg; type TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; helper:boolean; terrorx,terrory:Integer; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if (mouse.cursorpos.x > form1.Left) and (mouse.cursorpos.x < form1.Left+form1.width) and (mouse.CursorPos.y>form1.Top) and (mouse.CursorPos.y < form1.top+form1.height) And (helper=true) then begin image1.left:=-terrorx+mouse.cursorpos.x-form1.left; image1.top:=-terrory+mouse.cursorpos.y-form1.top; end else begin helper:=false; //exit; end; if helper=false then begin if (mouse.cursorpos.x<form1.Left) and (image1.left<=30) then image1.left:=image1.left+15; if (mouse.cursorpos.x>form1.Left+form1.width) and (image1.Left+image1.width>=form1.width-30) then image1.left:=image1.left-15; if (mouse.cursorpos.y<form1.top) and (image1.top<=30) then image1.top:=image1.top+15; if (mouse.cursorpos.y>form1.top+form1.height) and (image1.top+image1.height>=form1.height-59)then image1.top:=image1.top-15; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Form1.DoubleBuffered:=true; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ssright in shift then begin terrorx:=+x+4; terrory:=+y+30; helper:=true; end end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin helper:=false; end; end. So long, euer Richard PS: bitte sein nachsichtig mit mir Luckie , der Code ist von heute früh 1.30 - 3.30 Uhr :duck: //Edit Project ist leider zu Groß zu Hochladen ca. 8Mb, deswegen mal meine unit1.pas-datei //Edit benoetigt werden ein TTimer und ein TImage, wobei das bild groeßer als das Form sein muss, sonst ist das ja kein Problem. hehe |
Re: Mapscreen - Verbesserungsvorschläge, andere Lösungsansät
*push*
|
Re: Mapscreen - Verbesserungsvorschläge, andere Lösungsansät
GetAsyncKeyState / GetKeyState
1 = linke maustaste 2 = rechte maustatse (wenn ich mich jetzt nicht vertue) |
Re: Mapscreen - Verbesserungsvorschläge, andere Lösungsansät
@brechi,
thx das war was ich brauchte :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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-2025 by Thomas Breitkreuz