Announcement

Collapse
No announcement yet.

SOS->auslesen welches imgage geladen ist();

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SOS->auslesen welches imgage geladen ist();

    ich habe per zufallszahl 6 Bilder geladen(für Memory Spiel) und zwar erst in Stringvariblen geschrieben z.B.

    bild1 = "blabla.jpg";
    //dann habe ich die bilder geladen
    Form1->Image1->Picture->LoadFromFile(bild1);

    Nach dem ich auf ein Bild klicke soll der aktuelle Bildername ("blabla1.jpg") in eine Stringvariable gespeichert werden damit ich sie später vergleichen kann.

    Wie kann ich jetzt das aktuelle Bild in einen String speichern?
    zB.
    String bildvergleich1=Form1->Image1->GetFile();
    dann sollte in bildvergleich "blablabla.jpg" stehen

    oder kann ich die werte vergleichen
    z.b
    if (Form1->Image1->Picture == Form1->Image2->Picture)
    {
    bilder sind gleich
    }
    else
    {
    bilder sind nicht gleich
    {

    Viele Dank im voraus :-)
    mfg Marko Ehlert

  • #2
    Marko,

    mit dem Vergleich der Bild-Daten selbst würde ich mich nicht herumschlagen. Du könntest beim Laden eines Bildes dessen Namen in der property TImage::Hint verstecken oder für jedes Bild eine Nummer vergeben und diese in TImage::Tag ablegen. Anschließend vergleichst Du nur die Tags oder Hints.

    Gruß,
    Ja

    Comment


    • #3
      Hallo Jan,

      Danke aber so einfach ist das nicht.

      Stellen wir uns mal ein Memoryspiel mit 6 Kartenvor.

      beim Start hat man da nur die Rueckenansicht nennen wir es image_rueck.jpg diese werden beim Start Initialisiert.

      Und gleichzeitig wird eine Zufallszahl generiert und dann geht es in die funktion farbe_bestimmen(); wo eine switch / case Fallunterscheidung gestartet wird und die geht dann abhängig von der Zufallszahl in den jeweiligen Fall zb case:6 ... braek;

      nun habe ich 3 doppelte Farbkarten die per Mausklick (zb. auf Image1) auf die jeweilige Karte gezeigt wird, und nun kommt das eigentliche problem.

      nach jedem Mausklick will ich schauen ob Image1->Picture->GetImage() == Image2->Picture->GetImage() || Image1->Picture->GetImage() Image3->Picture->GetImage() || .....

      ist und je nachdem will ich die Karten offen lassen oder wieder verschwinden lassen wenn sie nicht uebereinstimmen
      mfg Marko

      und noch ne kleine frage.
      Wie kann ich die ganzen *.jpg Datein in meine *.exe Datei Einbinden (beim Kompilieren) damit sie der Anwender später nicht manipulieren kann

      Comment


      • #4
        Hallo Jan

        OK ok ich mache es so ist zwar etwas komplexer aber naja ist jedenfalls eine lösung :-))

        mfg Marko
        ps. vielen vielen danke nochma

        Comment


        • #5
          Hallo Marko,

          in die EXE bekommst Du die JPGs mittels einer Resource-Datei (.rc) und folgenden Einträgen:

          <PRE>
          100 RCDATA DISCARDABLE bild1.jpg
          101 RCDATA DISCARDABLE bild2.jpg
          </PRE>

          usw.

          Ich habe mir dann - nicht ganz elegant - so weitergeholfen, dass ich die Resourcedaten vor Verwendung in eine Datei speichere, diese dann lade und anschließend gleich wieder lösche:

          <PRE>
          //---------------------------------------------------------------------------
          void TMurks::CreateJpg(String Fn, int Idx)
          {
          TResourceStream *Rs;

          Rs = new TResourceStream((int)Instance, Idx, RT_RCDATA);
          Rs->SaveToFile(ChangeFileExt(Fn, ".jpg"));
          DelObject(Rs);
          // nun Bild laden...
          DeleteFile(Fn);
          }
          //---------------------------------------------------------------------------
          </PRE>

          Wahrscheinlich geht's auch 'glatter', diese Lösung war für C++-Builder 3.

          Gruß Knu

          Comment


          • #6
            oder als ImageList in das Formular mit aufnehme
            Christian

            Comment

            Working...
            X