Autor Beitrag
Schakal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Di 06.04.04 17:19 
alsoooo.....

ich hab nen bitmap auf nem panel. jetzt will ich das auf dem bitmap ein raster angezeigt wird, dieses raster kann ich mit den pfeiltasten bewegen. ein rasterfeld ist 16x16 pixel gross. und wenn ich jetzt über das bitmap gehe, dann soll sich mein mauszeiger nur noch von rastefeld zu rasterfeld bewegen können und man soll dabei das rasterfeld auf dem man gerade ist mit roten viereck erkennen.

also sozusagen, so etwas wie so ein tileset-editor den manche für ihre 2d spiele machen.
Urba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47



BeitragVerfasst: Mi 07.04.04 11:27 
Hallo,

Ein Raster kannst du relativ leicht erstellen. Du gehst einfach mit 2 for-Schleifen über das Bild. Die erste geht von links nach rechts und macht alle 16 Pixel einen Strich von ganz oben nach ganz unten. Die Zweite geht von oben nach unten und macht alle 16 Pixel einen Strich von links nach rechts. Damit hast du schonmal dein Raster mit sagen wir schwarzen Linien.

Im OnMouseOver-Ereigniss einer TImage kannst du auf die X bzw Y Koordinaten der Maus innerhalb der TImage zugreifen. Hier kannst du nun schaun, wo sie sich befinden und ob es sich dabei um eines deiner Kästchen handelt. Wenn ja dann zeichnest du einen roten Kasten um das betreffende Feld.

Den Rest wirst du schon hinbekommen :D

Gruss
Urba

_________________
Es gibt keine blöden Fragen, nur blöde Antworten :)
iGoA
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 103

Alle Win´s
D5 Prof
BeitragVerfasst: Mi 07.04.04 11:36 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure ZeichneRaster(MausX, MausY : integer);
var
  xloop, yloop : integer;
begin
  with Form1.Image1.Canvas do begin
    pen.Color := clBlack;
    brush.Style := bsClear;
    for yloop := 0 to cliprect.Bottom div RasterGroesse do
      for xloop := 0 to cliprect.Right div RasterGroesse do begin
        if (xloop = mausx) and (yloop = mausy) then pen.color := clRed
          else pen.color := clBlack;
        Rectangle(xloop*RasterGroesse, yloop*RasterGroesse, (xloop+1)*RasterGroesse,(yloop+1)*RasterGroesse);
      end;
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Image1.Repaint;
  ZeichneRaster(x div RasterGroesse,y div RasterGroesse);
end;

Öhmm... Hatte gerade Zeit und Bock. *g*