AGB  ·  Datenschutz  ·  Impressum  







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

Bei mousedown Canvas Verschieben?

Ein Thema von muhael · begonnen am 4. Dez 2013 · letzter Beitrag vom 5. Dez 2013
 
muhael

Registriert seit: 5. Mär 2013
42 Beiträge
 
#1

Bei mousedown Canvas Verschieben?

  Alt 4. Dez 2013, 20:59
Delphi-Version: 7
Hallo DP Team

Ich versuche eine "Karte" zu erstellen wo Zufällig Quadrate Durch ein Buttonclick Erzeugt werden.
Das Habe ich mit einem Array of byte gelöst.
Durch die Größe der Quadrate(32px*32px) und die Größe der Form(640,480(Unveränderbar!)) hat das Array eine Größe von 0-14 und 0-19.
Da ich aber die "karte" auch Größer machen will z.B 0-99 und 0-99 ist ja der größte Teil der Karte nicht mehr SIchtbar, und da ist mein Hänger wie schaffe ich das im MouseDown befehl die "Karte" so zu verschieben damit die nciht sichtbaren Teile Sichtbar werden? wie halt z.B bei Google Maps?


Anbei mein Quellcode für Das Zeichnen der "karte"



Delphi-Quellcode:
unit Unit1;

interface

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

type
  TKarte = Array [ 0..19, 0..14 ] of Byte;

  TForm1 = class(TForm)
    Button1: TButton;
  Procedure Render();
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

  private
    Karte : TKarte;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure TForm1.Render();
  var
      X , Y : Byte;
begin
  for Y := 0 to 14 do
  begin
    for X := 0 to 19 do
    begin
      Case Karte[ X, Y ] of

        0:
        begin
          Canvas.Brush.Color:= clWhite;
          Canvas.Pen.Color:= clWhite;
        end;

        1:
        begin
          Canvas.Brush.Color:= clGreen;
          Canvas.Pen.Color:= clBlack;
        end;
      end;
      Canvas.Rectangle( X * 32, Y * 32, X * 32 + 32, Y * 32 + 32 );
    end;
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Render();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Render();
end;

procedure TForm1.Button1Click(Sender: TObject);
   var Y2,X2:byte;
begin
  RANDOMIZE();
  Y2 := Random(15);
  X2 := Random(20);

  Karte[ X2, Y2 ]:= 1;
  Render();
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var
  FeldX, FeldY : Byte;
begin
  if ( X > 639 ) or ( X < 0 ) then Exit;
  if ( Y > 479 ) or ( Y < 0 ) then Exit;

  FeldX := X div 32;
  FeldY := Y div 32;

  Form1.Caption:= inttostr(FeldX)+'|'+inttostr(FeldY);
end;

end.
LG und Danke im Vorraus

muha
  Mit Zitat antworten Zitat
 


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 07:42 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