AGB  ·  Datenschutz  ·  Impressum  







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

map editor

Ein Thema von delphi-n · begonnen am 5. Okt 2009 · letzter Beitrag vom 6. Okt 2009
 
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: map editor

  Alt 6. Okt 2009, 12:37
Mal ein rudimentärer Ansatz für dein Problem:

Delphi-Quellcode:
  TItemAction = procedure (Sender: TMapItem) of Object;

  TMapItem = class
  private
    FPosition : TPoint; //Enthält die Rasterposition in der Map
    FImageIndex: Integer; //Bildindex für die Bildliste
    FAction: TItemAction; //Ereignisbehandlung, wenn das Item geklickt wird
  public
    constructor Create(Position: TPoint);
    property Position: TPoint read FPosition;
    property OnAction: TItemAction read FAction write FAction;
  end;

  TMap = class(TGraphicControl)
  private
    FImageList: TImageList; //Bildliste für die darzustellenden Icons
    FRowsCount: Integer; //Anzahl der Reihen in der Map
    FColumnsCount: Integer; //Anzahl der Spalten in der Map
    FItems: TObjectList; //Enthält die bereits bearbeiteten Zellen
    procedure SetRowsCount(const Value: Integer);
    procedure SetColumnsCount(const Value: Integer);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property RowsCount: Integer read FRowsCount write SetRowsCount;
    property ColumnsCount: Integer read FColumnsCount write SetColumnsCount;
  end;
TMapItem ist ein einzelnes Feld in deinder Map. Es enthält seine Position im Raster, einen ImageIndex für sein Icon und ein Ereignis, in dem du programmieren kannst, was beim Klicken auf das Feld passieren soll, o.ä.

TMap ist die eigentliche Karte. Hier werden alle eingefügten MapItems in einer Liste verwaltet. Hier wird auch das Klicken auf die Map verwaltet. Die Icons, sind alle in einer ImageList gespeichert und werden anhand des ImageIndex von TMap auf den Canvas gezeichnet. Interessant daran wäre z.B. auch, dass du die Karte auch relativ einfach vergrößern oder verkleinern kannst, indem du die Icons mit StretchBlt auf das Canvas kopierst.

Das Zeichnen könnte nun so aussehen, dass du jede Zelle, Reihe für Reihe, durchgehst und in FItems nachschaust, ob bereits etwas vorhanden ist. Falls ja wird an diese Stelle im Canvas das entsprechende Bild gezeichnet, falls nein ein "Empty"-Image. Edit: Ok, vermutlich ist es wesentlich schneller, zunächst eine leere Map zu zeichnen und anschließend die Liste durchzugehen und die vorhandenen Icons an die entsprechende Position zu kopieren.

Was in dem Quellcode drin steckt ist natürlich nur ein Ansatz von dem, was ich grad mal beschrieben habe. Da ist noch viel zu implementieren.
  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 10:30 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