Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mapscreen - Verbesserungsvorschläge, andere Lösungsansätze? (https://www.delphipraxis.net/45347-mapscreen-verbesserungsvorschlaege-andere-loesungsansaetze.html)

richard_boderich 4. Mai 2005 15:07


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

richard_boderich 6. Mai 2005 14:13

Re: Mapscreen - Verbesserungsvorschläge, andere Lösungsansät
 
*push*

brechi 6. Mai 2005 14:46

Re: Mapscreen - Verbesserungsvorschläge, andere Lösungsansät
 
GetAsyncKeyState / GetKeyState

1 = linke maustaste
2 = rechte maustatse (wenn ich mich jetzt nicht vertue)

richard_boderich 6. Mai 2005 20:21

Re: Mapscreen - Verbesserungsvorschläge, andere Lösungsansät
 
@brechi,

thx das war was ich brauchte :)


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