Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi "verdeckt" liegende bitmap abfragen (https://www.delphipraxis.net/88589-verdeckt-liegende-bitmap-abfragen.html)

Hartfrid Krause 17. Mär 2007 15:34


"verdeckt" liegende bitmap abfragen
 
Ich habe eine mit unterschiedlichen Farben gefüllt Karte deutscher Bundesländer.(bitmap2)
Wenn ich auf diese Farben stoße, wird der Name des Bundeslandes angezeigt.
Ich will eine gleichgroße - an gleicher Stelle - neue Landkarte der BRD drüber legen(bitmap1) und sie nach den Parteien einfärben.
Nun will ich über die neu Landkarte (bitmap1) drüber fahren und aus der "bunten" Karte mit onmousemove den Namen der Bundeslandes abfragen.
Das Klappt nicht.
Hier die beiden Karten:
Delphi-Quellcode:
procedure tform1. paintbox2paint(sender:TObject);
begin
Bitmap2 := TBitmap.Create;
 Bitmap2.LoadFromFile('laenderbunt.bmp');
 paintbox2.Canvas.Draw(0,0,Bitmap2);
 bitmap2.free;
 Bitmap1 := TBitmap.Create;
 Bitmap1.LoadFromFile('laender.bmp');
 paintbox1.Canvas.Draw(0,0,Bitmap1);
 bitmap1.free;
end;
Und hier die Abfrage über die bitmap2
Delphi-Quellcode:
procedure TForm1.paintbox2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
with canvas do begin
    if (X <= paintbox2.Width) and (Y <= paintbox2.Height) then
    case paintbox2.canvas.pixels[X, Y] of
      clcream:label1.Caption:='Nordrhein-Westfalen';
      $0005727A:label1.Caption:='Rheinland-Pfalz';
      $006F6F11:label1.Caption:='Niedersachsen';
      $00C551D9:label1.Caption:='Hessen';
      $0031F97C:label1.Caption:='Baden-Würthemberg';
.....//mit diesen Farben sind die Bundesländer gefüllt.
end;end;end;
Lege ich die bunte nicht direkt über die bitmap1, so kann ich bei den Bundesländer, die sichtbar sind, über die bitmap1 fahren und den Namen erkennen.

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]

bitsetter 17. Mär 2007 18:35

Re: "verdeckt" liegende bitmap abfragen
 
Ändere deinen Code mal so ab:

Hier die beiden Karten:
Delphi-Quellcode:
procedure tform1. paintbox2paint(sender:TObject);
begin
Bitmap2 := TBitmap.Create;
Bitmap2.LoadFromFile('laenderbunt.bmp');
//paintbox2.Canvas.Draw(0,0,Bitmap2);
//bitmap2.free; NICHT FREE!!
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('laender.bmp');
paintbox2.Canvas.Draw(0,0,Bitmap1);
bitmap1.free;
end;
Und hier die Abfrage über die bitmap2
Delphi-Quellcode:
procedure TForm1.paintbox2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
with canvas do begin
    if (X <= Bitmap2.Width) and (Y <= Bitmap2.Height) then
    case Bitmap2.canvas.pixels[X, Y] of//Pixel vom Bitmap2 'laenderbunt.bmp' abfragen
      clcream:label1.Caption:='Nordrhein-Westfalen';
      $0005727A:label1.Caption:='Rheinland-Pfalz';
      $006F6F11:label1.Caption:='Niedersachsen';
      $00C551D9:label1.Caption:='Hessen';
      $0031F97C:label1.Caption:='Baden-Würthemberg';
.....//mit diesen Farben sind die Bundesländer gefüllt.
end;end;end;
Ich hoffe mal das es auch bei dir irgendwann mal klappt.

inherited 17. Mär 2007 19:01

Re: "verdeckt" liegende bitmap abfragen
 
Zitat:

Zitat von bitsetter
Ändere deinen Code mal so ab:

Hier die beiden Karten:
Delphi-Quellcode:
procedure tform1. paintbox2paint(sender:TObject);
begin
Bitmap2 := TBitmap.Create;
Bitmap2.LoadFromFile('laenderbunt.bmp');
//paintbox2.Canvas.Draw(0,0,Bitmap2);
//bitmap2.free; NICHT FREE!!
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('laender.bmp');
paintbox2.Canvas.Draw(0,0,Bitmap1);
bitmap1.free;
end;

:shock: Der arme Speicher!
Wenn jedesmal, wenn die Paintbox neu gezeicnet wird, ein neues Bitmap erzeugt und nicht wieder freigegeben wird, dann gute nacht!
Du solltest dir Bitmap1 und Bitmap2 global erstellen und im OnCreate der Form laden (laender.bmp und laenderbunt.bmp)
Im OnPaint malst du dann nur Bitmap1 ohne nochmal irgendwas zu erzeugen. Das MouseMove kannst du vom Viertelnibblesetter übernehmen :stupid:

bitsetter 17. Mär 2007 19:24

Re: "verdeckt" liegende bitmap abfragen
 
@inherited

Das mit dem OnPaint habe ich Ihm auch schon 2 mal erzählt Grafik als screenshot , es hat sich bis jetzt wie du siehst nicht geändert.

Zitat:

Zitat von inherited
Du solltest dir Bitmap1 und Bitmap2 global erstellen

Macht er doch schon oder?

inherited 17. Mär 2007 19:58

Re: "verdeckt" liegende bitmap abfragen
 
Jep, stimmt. Dennoch sollte er die bilder nur einmal laden.

Hartfrid Krause 18. Mär 2007 10:52

Re: "verdeckt" liegende bitmap abfragen
 
Danke für die Hinweise
Jetzt klappts gut


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