Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Pokemon Pokedex programmieren - funktioniert nicht! (https://www.delphipraxis.net/164262-pokemon-pokedex-programmieren-funktioniert-nicht.html)

entwickler 4. Nov 2011 19:57

Pokemon Pokedex programmieren - funktioniert nicht!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Miteinander!

In einem vorherigen Thema stellte ich bereits Fragen, doch auch die Antworten brachten mich nicht viel weiter (http://www.delphipraxis.net/163923-j...nsprechen.html). Folgendes Problem:

N Freund von mir hat mich gefragt, ob ich für ihn nen Pokedex programieren kann. Alles gut und schön...
Er gab mir ein (etwas älteres) Bild und ich dachte mir, dass ich dem Programm einfach beibringen kann, den richtigen Bildausschnitt anzuzeigen. Doch soweit kam es nicht einmal. Ich bin schon daran gscheitert, eine einfache 80x80 Pixel große Bitmap-Datei von einer DLL in eine Exe zu "bringen" [Ist es überhaupt ein Bitmap oder immernoch eine JPG- Datei?]. Im Anhang habe ich meinen bisherigen Stand. Mit CopyRect kenn ich mich auch ehrlich gesagt überhaupt nicht aus (ich habe schon viel darüber gelesen, aber nichts verstanden) und verwende es hier zum ersten mal. Kann mir vielleicht jemand weiterhelfen? Ich bekomme einfach kein Bild heraus und weis nicht wo der Fehler liegt.
Ach so, zum testen habe ich die Pictures.dll natürlich immer mit der neusten Version überschrieben, darin liegt der Fehler nicht (mehr!).

Danke!

Bummi 4. Nov 2011 20:16

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Auwei Auwei, da geht aber sehr viel durcheinander.
Ich denke vor Du Dich daran machst Bildausschnitte aus einer DLL zu übergeben solltest Du dies ausgiebig innerhalb eine Programms machen, ohne DLL.
Wenn das läuft wie es soll, kannst Du überlegen wie Du das Bitmap am sinnvollsten von der DLL ins Programm bekommst.

Luckie 4. Nov 2011 20:17

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Was zur Hölle ist ein Pokedex?

Und bitte ändere den Titel deines ersten Beitrages. So sagt er nichts über dein (Programmier)problem aus. Es wäre auch wesentlich einfacher zu helfen, wenn du eine konkrete Fragen stellen würdest, dann kannst du auch einen passenden und aussagekräftigen Beitragstitel vergeben.

entwickler 4. Nov 2011 20:18

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Hinbekommen habe ich das Laden von Bildern aus DLLs aber schon eigenständig.

entwickler 4. Nov 2011 20:20

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
@ Luckie

Wie kann ich den Titel des Beitrags nachträglich ändern (bisher musste ich das noch nicht)?

Luckie 4. Nov 2011 20:26

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Ich mache dir einen Vorschlag: Mach ein neues Thema auf in dem du konkret dein Problem schilderst mit dem zugehörigen Quellcode.

entwickler 4. Nov 2011 20:36

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Okay, ich komme gerade selbst etwas weiter...

Ich werde demnächst eine neues Thema erstellen und den Link dann hier einfügen.
Ach so, @ Luckie: In dem Beitragstitel steht:

Zitat:

Pokemon Pokedex ...
also, alle, die schon mal Pokemon gespielt haben, wissen etwas damit anzufangen, anderen werde ich mein Problem in dem neuen Thema detaillierter beschreiben.

PS: Weitere Anregungen können hier trotzdem noch veröffentlicht werden! :thumb:

Bummi 4. Nov 2011 20:48

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
nicht daß ich es gut fände, aber so soll es wohl funktionieren ....

das Far bei

procedure GetPokemon(Pokemon : TPokemon; Image : TImage);
external 'Pictures.dll' ;

habe ich entfernt ....

Delphi-Quellcode:
  procedure GetPokemon(Pokemon : TPokemon; Image : TImage);
  var
    Bitmap : TBitmap;
    x,y:Integer;
  begin
    Pokemon_Pictures := TPokemon_Pictures.Create(Application);
      try
        Bitmap := TBitmap.Create;
          try
            Bitmap.Assign(Pokemon_Pictures.Image1.Picture.Graphic);
            if (Pokemon>=Bisasam) and (Pokemon<=Arceus) then
                begin
                x := Ord(Pokemon) div 25;
                y := Ord(Pokemon) Mod 25;
                Image.Canvas.CopyRect(rect(0, 0, 80, 80), BitMap.Canvas, rect(x*80,y*80, (x+1)*80,(y+1)* 80));
                end
              else
                raise Exception.Create('Angefordertes Pokemon konnte nicht gefunden werden!');

        finally
        Bitmap.Free;
        end;
    finally
      Pokemon_Pictures.Free;
    end;
  end;

entwickler 4. Nov 2011 20:57

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Was bewirkt denn dieses Wörtchen "far" bei Delphi?

Bummi 4. Nov 2011 21:09

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
AFAIK unter 32-Bit + nichts mehr...

aber die Bug's lagen in oben beiliegendem Code...

entwickler 5. Nov 2011 11:30

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Wow, bei mir funktioniert das jetzt auch, nur ein kleiner Fehler ist noch drin: Wenn ich z. B. 'Arceus' indas Testprogramm eingebe, bekomme ich hinterher ein Bild von 'Kikugi'.

Du musstest einfach nur x und y vertauschen:

Delphi-Quellcode:
procedure GetPokemon(Pokemon : TPokemon; Image : TImage);
  var
    Bitmap : TBitmap;
    x, y :Integer;
  begin
    Pokemon_Pictures := TPokemon_Pictures.Create(Application);
      try
        Bitmap := TBitmap.Create;
          try
            Bitmap.Assign(Pokemon_Pictures.Image1.Picture.Graphic);
            if (Pokemon>=Bisasam) and (Pokemon<=Arceus) then
                begin
                y := Ord(Pokemon) div 25;             // vertauscht
                x := Ord(Pokemon) Mod 25;             // vertauscht
                Image.Canvas.CopyRect(rect(0, 0, 80, 80), BitMap.Canvas, rect(x*80,y*80, (x+1)*80,(y+1)* 80));
                end
              else
                raise Exception.Create('Angefordertes Pokemon konnte nicht gefunden werden!');
        finally
        Bitmap.Free;
        end;
    finally
      Pokemon_Pictures.Free;
    end;
  end;
Vielen Dank für deine/ eure Hilfe! Ein Pokemon scheine ich jedoch vergessen haben aufzulisten...

Es ist Porygon2:

Delphi-Quellcode:
type
  TPokemon =
  (Bisasam, Bisaknosp, Bisaflor, Glumanda, Glutexo, Glurak, Schiggy, Schillok, Turtok,
    Raupy, Safcon, Smettbo, Hornliu, Kokuna, Bibor, Taubsi, Tauboga, Tauboss, Rattfratz,
    Rattikarl, Habitak, Ibitak, Rettan, Arbok, Pikachu, Raichu, Sandan, Sandamer, Nidoran_w,
    Nidorina, Nidoqueen, Nidoran_m, Nidorino, Nidoking, Piepi, Pixi, Vulpix, Vulnona, Pummeluff,
    Knuddeluff, Zubat, Golbat, Myrapla, Duflor, Giflor, Paras, Parasek, Bluzuk, Omot, Digda,
    Digdri, Mauzi, Snobilikat, Enton, Entoron, Menki, Rasaff, Fukano, Arkani, Quapsel, Quaputzi,
    Quappo, Abra, Kadabra, Simsala, Machollo, Maschock, Machomei, Knofensa, Ultrigaria, Sarzenia,
    Tentacha, Tentoxa, Kleinstein, Georok, Geowaz, Ponita, Gallopa, Flegmon, Lahmus, Magnetilo,
    Magneton, Porenta, Dodu, Dodri, Jurob, Jugong, Sleima, Sleimok, Muschas, Austos, Nebulak,
    Alpollo, Gengar, Onix, Traumato, Hypno, Krabby, Kingler, Voltobal, Lektrobal, Owei, Kokowei,
    Tragosso, Knogga, Kicklee, Nockchan, Schlurp, Smogon, Smogmog, Rihorn, Rizeros, Chaneira,
    Tangela, Kangama, Seeper, Seemon, Goldini, Golking, Sterndu, Starmie, Pantimos, Sichlor,
    Rossana, Elektek, Magmar, Pinsir, Tauros, Karpador, Garados, Lapras, Ditto, Evoli, Aquana,
    Blitza, Flamara, Porygon, Amonitas, Amoroso, Kabuto, Kabutops, Aerodactyl, Relaxo, Arktos,
    Zapdos, Lavados, Dratini, Dragonir, Dragoran, Mewtu, Mew,
    Endivie, Lorblatt, Meganie, Feurigel, Igelavar, Tornupto, Karnimani, Tyracroc, Impergator,
    Wiesor, Wiesenior, Hoothoot, Noctuh, Ledyba, Ledian, Webarak, Ariados, Iksbat, Lampi, Lanturn,
    Pichu, Pii, Fluffeluff, Togepi, Togetic, Natu, Xatu, Voltilamm, Waaty, Ampharos, Blubella,
    Marill, Azumarill, Mogelbaum, Quaxo, Hoppspross, Hubelupf, Papungha, Griffel, Sonnkern,
    Sonnflora, Yanma, Felino, Morlord, Psiana, Nachtara, Kramurx, Laschoking, Traunfugil,
    Icognito, Woingenau, Girafarig, Tannza, Forstellka, Dummisel, Skorgla, Stahlos, Snubbull,
    Granbull, Baldorfish, Scherox, Pottrott, Skaraborn, Sniebel, Teddiursa, Ursaring, Schneckmag,
    Magcargo, Quiekel, Keifel, Corasonn, Remoraid, Octillery, Botogel, Mantax, Panzaeron,
    Hunduster, Hundemon, Seedraking, Phanpy, Donphan,
 Porygon2,   // vergessen!
 Damhirplex, Farbeagle, Rabauz,
    Kapoera, Kussilla, Elekid, Magby, Miltank, Heiteira, Raikou, Entei, Suicune, Larvitar, Pupitar,
    Despotar, Lugia, Ho_Oh, Celebi,
    Geckarbor, Reptain, Gewaldro, Flemmli, Jungglut, Lohgock, Hydropi, Moorabbel, Sumpex, Fiffyen,
    Magnayen, Zigzachs, Geradaks, Waumpel, Schaloko, Papinella, Panekon, Pudox, Loturzel, Lombrero,
    Kappalores, Samurzel, Blanas, Tengulist, Schwalbini, Schwalboss, Wingull, Pelipper, Trasla,
    Kirlia, Guardevoir, Gehweiher, Maskeregen, Knilz, Kapilz, Bummelz, Muntier, Letarking, Nincada,
    Ninjask, Ninjatom, Flurmel, Krakeelo, Krawumms, Makuhita, Hariyama, Azurill, Nasgnet, Eneco,
    Enekoro, Zobiris, Flunkifer, Stollunior, Stollrak, Stolloss, Meditie, Meditalis, Frizelbliz,
    Voltenso, Plusle, Minun, Volbeat, Illumise, Roselia, Schluppuck, Schlukwech,
    Kanivanha, Tohaido, Wailmer, Wailord, Camaub, Camerupt, Qurtel, Spoink, Groink, Pandir,
    Knacklion, Vibrava, Libelldra, Tuska, Noktuska, Wablu, Altaria, Sengo, Vipitis, Lunastein,
    Sonnfel, Schmerbe, Welsar, Krebscorps, Krebutack, Puppance, Lepumentas, Liliep, Wielie,
    Anorith, Armaldo, Barschwa, Milotic, Formeo, Kecleon, Shuppet, Banette, Zwirrlicht, Zwirrklop,
    Tropius, Palimpalim, Absol, Isso, Schneppke, Firnontor, Seemops, Seejong, Walraisa, Perlu,
    Aalabyss, Saganabyss, Relicanth, Liebiskus, Kindwurm, Draschel, Brutalanda, Tanhel, Metang,
    Metagross, Regirock, Regice, Registeel, Latias, Latios, Kyogre, Groudon, Rayquaza, Jirachi,
    Deoxys,
    Chelast, Chelcarain, Chelterrar, Panflam, Panpyro, Panferno, Plinfa, Pliprin, Impoleon,
    Staralili, Staravia, Staraptor, Bidiza, Bidifas, Zirpurze, Zirpeise, Sheinux, Luxio, Luxtra,
    Knospi, Roserade, Koknodon, Rameidon, Schilterus, Bollterus, Burmy, Burmadame, Moterpel,
    Wadribie, Honweisel, Pachirisu, Bamelin, Bojelin, Kikugi, Kinoso, Schalellos, Gastrodon,
    Ambidiffel, Driftlon, Drifzepeli, Haspiror, Schlapor, Traunmagil, Kramshef, Charmian, Shnurgarst,
    Klingplim, Skunkapuh, Skuntank, Bronzel, Bronzong, Mobai, Pantimimi, Wonneira, Plaudagei,
    Kryppuk, Kaumalat, Knarksel, Knakrack, Mampfaxo, Riolu, Lucario, Hippopotas, Hippoterus,
    Pionskora, Piondragi, Glibunkel, Toxiquak, Venuflibis, Finneon, Lumineon, Mantirps,
    Shnebedeck, Rexblisar, Snibunna, Magnezone, Schlurplek, Rihornior, Tangoloss, Elevoltek,
    Magbrant, Togekiss, Yanmega, Folipurba, Glaziola, Skorgro, Mamutel, Porygon_Z, Galagladi,
    Voluminas, Zwirrfinst, Frosdedje, Rotom, Selfe, Vesprit, Tobutz, Dialga, Palkia, Heatran,
    Regigigas, Giratina, Cresselia, Phione, Manaphy, Darkrai, Shaymin, Arceus);

entwickler 11. Nov 2011 20:26

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Die Fortsetzung habe ich nun gepostet unter:

http://www.delphipraxis.net/164427-p...ml#post1135784

Sir Rufo 11. Nov 2011 22:18

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
2 Dinge frage ich mich jetzt gerade?

1. Wozu erzeugst du eine Instanz von
Delphi-Quellcode:
TPokemon_Pictures
? Nur als Container für ein Bitmap? Und als Owner
Delphi-Quellcode:
Application
?
2. Was sollen wir nun mit diesen ganzen HuffelPuffs-Enums?

entwickler 12. Nov 2011 11:09

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
@ Sir Rufo

1. Anders hat es anfangs bei mir nicht funktioniert. Ich habe erst eine jpg in das Image geladen und anschließend wollte ich die jpg- Datei als Grafik an die EXE übergeben. Nachdem irgendein Fehler auftrat hab ich das so versucht - und es hat funktioniert. Die Variable Bitmap(TBitmap) habe ich hinterher benutzt, um die JPG in einen Bitmap zu verwandeln, sonst, so Delphi, kann ich nichts aus derGrafik ausschneiden. Wie hättest du/ hätten Sie das denn gemacht?

2. Ganz einfach: Die Grafiken können dann hinterher auf Wunsch einzeln in einem Image angezeigt werden, einzelne Kommentare können dann aus einer Datenbank geladen und beispielsweise im Label o.ä. angezeigt werden (siehe Thema).

Bummi 12. Nov 2011 12:04

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
[OT]
IHR ...
Wie hättet Ihr das denn gemacht?
:wink:
[/OT]

Sir Rufo 12. Nov 2011 16:22

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
1. so
Delphi-Quellcode:
procedure GetPokemon(Pokemon : TPokemon; Image : TImage);
  var
    Bitmap : TBitmap;
    x, y :Integer;
  begin

    // Einen Owner gibt man nur dann an, wenn dieser Owner für das Entsorgen der
    // Instanz verantwortlich sein soll ... dem ist hier aber nicht, also schon mal
    // auf jeden Fall als Owner nil übergeben (kein Owner)

    Pokemon_Pictures := TPokemon_Pictures.Create( nil );
      try
        Bitmap := TBitmap.Create;
          try
            Bitmap.Assign(Pokemon_Pictures.Image1.Picture.Graphic);
            if (Pokemon>=Bisasam) and (Pokemon<=Arceus) then
                begin
                y := Ord(Pokemon) div 25; // vertauscht
                x := Ord(Pokemon) Mod 25; // vertauscht
                Image.Canvas.CopyRect(rect(0, 0, 80, 80), BitMap.Canvas, rect(x*80,y*80, (x+1)*80,(y+1)* 80));
                end
              else
                raise Exception.Create('Angefordertes Pokemon konnte nicht gefunden werden!');
        finally
        Bitmap.Free;
        end;
    finally
      Pokemon_Pictures.Free;
    end;
  end;
Sehe ich das richtig, du hast da ein Formular (TPokemon_Pictures) mit einem Image, in dem die Bilder gespeichert sind ... schon recht gruselig ;)
denn ...
Zitat:

Zitat von entwickler (Beitrag 1135829)
2. Ganz einfach: Die Grafiken können dann hinterher auf Wunsch einzeln in einem Image angezeigt werden, einzelne Kommentare können dann aus einer Datenbank geladen und beispielsweise im Label o.ä. angezeigt werden (siehe Thema).

Wozu denn so ein MischMasch?
Einmal liegen die Informationen als Bild vor (aus dem werden Teile dann ausgeschnitten) - fest im Programm oder wird das extern geladen?
Dann wiederum ein Enum fest verdrahtet im Programm, welche dann als Referenz auf diese Teil-Bilder benutzt werden.
Und dann noch eine Datenbank wo (ja ganz dynamisch) weitere Informationen zu finden sind.

Entweder alles fest verdrahten oder alles dynamisch, aber nicht so ein Gewurschtel ;)

Leg doch einfach alles in die Datenbank (Namen, Bilder, Informationen) und lade dir einfach alles von selbiger.

entwickler 28. Dez 2011 18:53

AW: Pokemon Pokedex programmieren - funktioniert nicht!
 
Gute Idee mit der Datenbank - so werde ich es machen.

Scheint mir, jetzt wo du's schreibst, auch irgendwie die einfachste Methode zu sein. :gruebel:

Vielen Dank euch allen! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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