Autor Beitrag
RonniX
Hält's aus hier
Beiträge: 2

Win XP
Delphi 5
BeitragVerfasst: Mi 11.10.06 09:29 
Hallo Leute,

ich weiß, jetzt werden wahrscheinlich gleich wieder Kommentare laut, wie.. hast du schon mal danach gegoogelt, oder das Forum durchsucht.. ja, hab ich.
Ich hatte im Forum auch ein sehr gutes Tutorial gefunden, welches mir auch bereits zum Teil weitergeholfen hat. >> Einen Abspann scrollen.

********************************* Beschreibung des Projekts *****************************

Grundsätzlich soll hier eine Saalplanverwaltung umgesetzt werden.
Im ersten Schritt wird jeder Sitzplatz durch ein simples Rechteck dargestellt, welches je nach Status eine andere Farbe hat. Hier soll man mit den Pfeiltasten navigieren können, mit der Leertaste einen neuen Status setzen können.

*****************************************************************************************

Da ich zwar sehr viel mit Delphi programmiere, aber in Sachen DelphiX ein absoluter Newbie bin, benötige ich hierbei Eure Hilfe :

Ich muss zur Laufzeit dyn. ein Bitmap erstellen, welches aus div. Angaben, die aus einer Datenbank gelesen werden erzeugt wird. Dieses wird jedoch größer, als der Bildschirm sein, kann aber auch von der Höhe und Breite her jeweils unterschiedlich sein.

Bei statischen Bitmaps, weiß ich auf Grund des Tutorials, dass ich hier eine TDXImageList einbinden und da ein neues Item hinzufügen muss, in welches die Bitmap geladen wird.

Durch die TDXSpriteEngine wird ein TBackgroundsprite erzeugt. Soweit habe ich alles verstanden. Wie kann ich aber hier eine dyn. Bitmap verwenden?

Hierzu habe ich noch eine weitere Frage :
Bis ich auf DelphiX gestoßen bin, habe ich versucht, das ganze Projekt über ein normales TImage zu realisieren. Hierbei bin ich dann auf einige Probleme gestoßen, die mich letztendlich dazu veranlasst haben, mich nach etwas neuem umzuschauen.

Um in meinem alten Projekt eine Bewegung zu realisieren, hatte ich bisher immer ein Bitmap im Speicher erzeugt, die aktuelle Position berechnet, das entsprechende Rechteck farbig eingefärbt und diese mit BitBlt dann auf das Image gezeichnet.

Da die Dimensionen des o.b. Saal entsprechend groß sein kann, kann die Größe der Rechtecke variieren. Ich möchte aber auch hier eine Bewegung realisieren und auch den Status ändern können.
Ich glaube ich muss hier irgendwie umdenken. Muss ich hier für das "Navigationsrechteck" ein eigenes Sprite verwenden, welches ich auch anhand der berechneten Größe im Speicher erzeuge, oder ist es auch sinnvoll die aktuelle Position direkt auf das "Hintergrund" Bitmap zu zeichnen?
Wenn es als Sprite verwendet wird, wie kann ich dieses Bitmap dann hier dyn. erzeugen und einbinden. (Bezieht sich im Prinzip auf die gleiche Problematik wie oben)

Der Saal wird ganz simple durch Reihen und Spalten definiert.
Wie kann ich es am einfachsten Realisieren, jeweils die aktuelle Spalte, bzw. Reihe des "Navigationsrechecks" zu bestimmen? Bisher hatte ich mir alle möglichen Koordinaten in einem Array gespeichert und beim Druck auf eine Navigationstaste die aktuelle Position abgefragt, in dem ich das Array von Anfang bis zur gefundenen Position durchlaufen bin.

Aber jetzt wirds für mich schwer. Jetzt scrollt der "Saal" als Hintergrund auch noch nach oben, unten, links oder rechts. Nun kann ich über die gespeicherten Koordinaten nicht mehr viel erreichen. Wie kann man das am besten realisieren?

Vielleicht geht das aber in DelphiX viel einfacher?
Wie gesagt, verzeiht mir bitte meine "dummen" Fragen, aber ich bin eigentlich Datenbankprogrammierer und habe bisher von DelphiX noch nahezu keine Ahnung.

Ich hoffe, Ihr könnt mir helfen und besten Dank schon mal dafür.

Viele Grüße

Ronni
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 11.10.06 11:04 
hi, ich habe schon einige Programme geschrieben die rießige unterschiedlich große Bilder ver- und bearbeitet haben. Dafür habe ich immer ein ganz normales TBitmap verwendet und mit WinAPI aufrufen oder TCanvas darauf gezeichnet. Zur Anzeige verwende ich immer ein TImage Objekt das in einer Scrollbox liegt. Damit hatte ich eigentlich niemals Probleme.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
RonniX Threadstarter
Hält's aus hier
Beiträge: 2

Win XP
Delphi 5
BeitragVerfasst: Mi 11.10.06 11:16 
Hallo Sinspin,

vielen Dank für Deine schnelle Antwort. Grundsätzlich hatte ich das erstmal genauso realisiert und umgesetzt. Das funktioniert auch. Nur : Ein TImage hat keine Focus-Eigenschaft und auch keine Key-Events.

Setze ich aber Komponenten auf die Form, die ich für einen entsprechenden Designer benötige, welche den Focus erhalten können, funktioniert die Tastensteuerung nicht mehr, da die Tastatureingaben von dem fokusierten Objekt abgefangen werden.

Daher wollte ich mich für DelphiX entscheiden.

Viele Grüße

Ronni
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.10.06 10:58 
Hi Ronni

Es gibt Lösungen die mir auf Anhieb einfallen.

1. Fehlende Events nachrüsten.
Eine eigene Klasse von TImage ableiten und die fehlenden sozusagen nachrüsten. Dazu gibts genügen Beispiele im Forum.

2. DelphiX - mit TDXDIB und TDirectDrawSurface
Erzeuge ein zusätzliche Surface und nutze diese als temporären Bildspeicher.
- Bild laden (beliebiges Format)
- Umwandeln in ein DIB
- in der TDXDIB zwichen speichern, bearbeiten ...
- mittel "TDirectDrawSurface.LoadFromGraphic(DXDIB1.DIB);" Bild in die Surface übernehmen
- TDirectDrawSurface kann dann mit DXDraw.Surface.Draw(..) geblittet werden
Im Grunde funktioniert das dann als sekundärer BackBuffer.
(Beispiel: DielphX/Samples/Graphic/Surface)

3. DelphiX - Dynamische ImageList
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  DXImageList1.Items.Add;   //Hinzufügen
  DXImageList1.Items[DXImageList1.Items.Count-1].Picture.LoadFromFile('My.bmp');  //Laden
  DXImageList1.Items[DXImageList1.Items.Count-1].Name:= 'My.bmp';  //mit Namen versehen
  DXImageList1.Items[DXImageList1.Items.Count-1].Restore;  //übernehmen und initialisieren


MfG Simon