Dynamisches Laden vom Bilder bei Drag&Drop
-
Hallo,
ich habe ein Problem bei der Darstellung der richtigen Bildern.
Es gibt 8 Images in einer Reihe (keine ImageList) die jeweils verschiedenfarbige Bitmaps anzeigen. Diese fungieren als Spielsteine.
Weiter sind 4 Images (auch keine ImageList) vorhanden, auf die die Spielsteine gezogen werden können. Jetzt möcht ich "einfach nur" herausfinden, welches Bitmap ich laden muss, wenn ich z.B. einen roten Stein auf das erste Ablagefeld lege. Es könnte ja auch ein blauer Stein darauf gezogen werden, weswegen ein statisches Laden wie z.B.
imgAblageFeld1->Picture->LoadFromFile("Image1.bmp");
nicht geht.
Die übergebenen Parameter bei OnEndDrop sindTObject *Sender, TObject *Target, int X, int Y)
. Ich habe schon versucht mit Sender herauszufinden, welches Bitmap der gezogene Stein geladen hat, aber ich bekomme es nicht hin:
AblageFeld1->Picture->LoadFromFile((TImage *)Sender)->Name
Könnte mir da jemand auf die Sprünge helfen?
Besten Dank derweil,
Schorschi
-
du mußt hast ja z.B.
[][][]
[][][]
[][][]so nen feld also nen int Spielfeld[3][3] in diesem fall ...
da speicherst du ja z.B. ab was da für steine drin sitzen .. etc
und übergibst das mit parametern.
-
Hmm...also mit der Antwort kann ich leider gar nix anfangen...
Also das Feld sieht ungefähr so aus, spielt ja keine Rolle.
Was da drin sitzt ist mir schon klar, da ist ja nicht das Problem.
Ich weiß auch was rein soll, nur wie krieg ich den richtigen Inhalt in mein Ablagefeld?!Derzeit spiele ich ein bisschen mit Assign rum, aber ich kassiere jedesmal eine Exception wenn ich folgendes versuche:
void __fastcall TForm1::imgSpielstein1DragDrop(TObject *Sender, TObject *Source, int X, int Y) { imgAblagefeld->Picture->Bitmap->Assign((Graphics::TBitmap *)Sender) }
Mir geht es nur darum die richtige Farbe auf das Ablagefeld zu bekommen, indem ich bei OnDragDrop das jeweilige Bitmap in der Farbe des "gedroppten" Spielsteins in das Ablagefeld lade.
-
ich weiss net was dein Problem ist du kriegst doch raus was Image1 für nen wert hat ... du kannst doch auf das Picture zugreifen ohne weiteres ich versteh ehrlich gesagt dein problem nicht . !
-
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::imgAblagefeld1DragDrop(TObject *Sender, TObject *Source, int X, int Y) { // imgAblagefeld1->Picture->LoadFromFile("Image1.bmp"); /*Hier liegt das Problem: Ich würde jetzt gerne z.B. den roten Stein auf das imgAblagefeld1 laden, da ich diesen über das Feld gezogen und losgelassen habe. Um dies zu bewerkstelligen versuche ich derzeit die Eigenschaften des Senders auf eben diese Ablagefläche zu kopieren. Dabei kassiere ich allerdings immer Konvertierungsfehler wie: "TImage kann nicht zu TPicture zugewiesen werden". Dafür benötige ich jetz Hilfe. Wie kann ich also die Eigenschaften von meinem imgSpielstein1 (vom Typ Image) auf imgAblagefeld1 (vom Typ Image) übertragen?*/ imgAblagefeld1->Picture->Assign((TImage *)Sender); } //---------------------------------------------------------------------------
Ist die Situation jetzt klarer?!
[ Dieser Beitrag wurde am 24.04.2003 um 11:07 Uhr von Jansen editiert. ]
-
soweit ich das weiss musst du wenn du das dynamisch machst auch deine eigenen methoden schreiben ! Es heißt nunmal auch programmieren und nicht Zusammenklicken !
Du brauchst Variablen mit den pfäden zu den einzelnen *.bmp und mußt dir speichern was nen spielstein für nen img hat und wo die spielsteine stehen ..
-
Tut mir leid für die ewig lange Zeile oben, ich dachte das Forum bricht die Zeilen automatisch um!
Ich bin wieder ein Stück weiter gekommen, aber das Hauptproblem besteht leider immer noch
Vorher habe ich versucht ein Picture-Objekt einem TImage-Objekt zuzuweisen... (siehe obiger Code).
Jetzt hab ich das korrigiert (sieh Code unten)
Ich erhalte trotzdem die Fehlermeldung: "TImage kann nicht zu TImage zugewiesen werden"
Wo liegt das Problem? In der Hilfe finde ich nicht mehr zu diesem Thema[code type="C++" tabs="4"]
//---------------------------------------------------------------------------
void __fastcall TForm1::imgAblagefeld1DragDrop(TObject *Sender, TObject *Source,
int X, int Y)
{
// Statisch, also nicht zu gebrauchen:
// imgAblagefeld1->Picture->LoadFromFile("Image1.bmp");imgAblagefeld1->Assign((TImage *)Sender);
}
//---------------------------------------------------------------------------
-
Hi,
du darft nicht Sender nehmen. Nimm Source, dann gehts:
Image1->Picture->Bitmap = ((TImage*)Source)->Picture->Bitmap;
BM
-
Versuchs mal mit
ImgAblagefeld1 = dynamic_cast <TImage*> (Sender);
Eigentlich müsste es so gehen
-
hmm dynamic_cast is unterster stil ! imho
-
Super! Danke für den Hinweis
-
Afaik find ichs lustig das du erst die grafik machst und dann die Engine hinter das Spiel bringst hättest du das nach nem modernen OOP Pattern durchgeplant und hättest dir was überlegt müßtest du nu nicht nem Ding nen Wert mit nem Holzhammer zuweisen .. !
Aber eins kann ich dir im Vorraus sagen
du wirst Probleme bei der Berechnung kriegen
-
Hast schon Recht mit der Reihenfolge, aber ich bin unter Zeitdruck!
Ich komme aus der Konsolenwelt und müsste jetzt erstmal alle möglichen
Komponenten anschauen um herauszufinden was die so alles draufhaben.Da mach ich's lieber so das ich erst das Frontend erstelle und dann das Backend
angleiche, dass wird für mich als Konsolengewohnter einfacher.Ich denk Du beziehst den Holzhammer auf den dynamic_cast, aber keine Angst, ich
nehm das Beispiel von <BM>. Da ist nix ungewöhnliches dabei.
Berechnen brauch ich außerdem nix...
-
Original erstellt von 1ntrud0r:
hmm dynamic_cast is unterster stil ! imhoC-Cast ist unterster Stil. Siehe FAQ.
-
Bitte beim Thema bleiben. Eine (neuerliche) Grundsatzdiskussion über dynamic_cast gehört nach "C++".