Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Keine 0 schreiben, aber lesen! o.O (https://www.delphipraxis.net/76649-keine-0-schreiben-aber-lesen-o-o.html)

Neutral General 7. Sep 2006 17:53

Re: Keine 0 schreiben, aber lesen! o.O
 
Ach son Quatsch.. Es liegt wie gesagt nicht am laden. Hab mir schonmal jede einzelne ID ausgeben lassen nach dem laden und keiner war 0. (Gültige ID-Werte sind x*4)

Aber meine Draw Procedure verursacht immer eine AV.

Delphi-Quellcode:
procedure TcfrMapView.Draw(dx,dy: Integer);
var i: Integer;
    tdx,tdy: Integer;
    tb,tob: TBitmap;
begin
  with ImgSurface.Picture.Bitmap.Canvas do
  begin
   Brush.Color := clblack;
   Rectangle(-1,-1,Width+1,Height+1);

   if Length(frmMain.Map.MapPlan) = 0 then exit;

   // Tiles
   for i:= 0 to High(frmMain.Map.MapPlan) do
   begin
   tdx := ((i mod frmMain.Map.Width)*64)+(-dx*64);
   tdy := ((i div frmMain.Map.Width)*64)+(-dy*64);
    if (frmMain.Map.MapPlan[i] <> High(Cardinal)) and
       (tdx <= imgSurface.Width) and
       (tdy <= imgSurface.Height) and
       (tdx >= 0) and
       (tdy >= 0) then
    begin
     tb := TBitmap.Create;
     tob := TBitmap.Create;
     tb.Assign(frmMain.Textures[(frmMain.Map.MapPlan[i] div 4)-1].Bitmap);
     tob.Assign(frmMain.Textures[(frmMain.Map.MapPlan[i] div 4)-1].Overlay);
     RotateBitmap(tb,(frmMain.Map.MapPlan[i] mod 4)*90);
     RotateBitmap(tob,(frmMain.Map.MapPlan[i] mod 4)*90);
     Draw(tdx,tdy,tb);
     Draw(tdx,tdy,tob);
    end;
   end;
   ... // Unwichtig
end;
Warum krachts da? Wenn ich Einzelschritte mache oder mir bei jedem/einem beliebigen Schleifendurchlauf ne Message anzeigen lasse dann klappt alles -.- Und vorher hat auch alles geklappt... Die procedure HAT mal geklappt.. und seitdem meine IDs nicht bei 0 anfangen (0,4,8,12,..) sondern bei 4 (4,8,12,...) krachts da irgendwo.. aber ich habe sonst auch alles auf 4 umgestellt. Das ist sicher.

Gruß
Neutral General

Flocke 7. Sep 2006 18:54

Re: Keine 0 schreiben, aber lesen! o.O
 
Ersetze in deinem Code mal Read und Write durch ReadBuffer und WriteBuffer. Die haben dieselbe Semantik, lösen aber eine Exception aus wenn das Lesen bzw. Schreiben nicht klappt. Dann bist du auf jeden Fall dahingehend auf der sicheren Seite, dass die Ein- und Ausgabe funktioniert.

Neutral General 7. Sep 2006 19:16

Re: Keine 0 schreiben, aber lesen! o.O
 
Ich hab herausgefunden woran es liegt -.-^^

Ich habe wenn ich meinen Editor starte keine Textur angewählt gehabt (Die ID mit der gemalt wird = 0)
So wenn man jetzt beim Opendialog auf öffnen geklickt hat, ist der Klick durch den Opendialog auf mein Image und hat ausgelöst das die ID meines Pinsels an diese Stelle gesetzt wird => Die 0 wird gesetzt und während meine Procedure noch läd schleicht sich eine 0 is mein Feld und dann will mein Programm malen und *booom* -.-^^ Hab jetzt den Start-Brush auf ID=4 gesetzt....

Aber wieso geht der Klick dadurch? Kann ich irgendwie machen das das nicht so ist ? :|

Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz