![]() |
Transparentes Bild nicht überall Transparent...
Ich habe ein TImage auf dem man per drag and drop einen Rahmen ziehen können soll.
Da das darunterliegende Image nicht übermalt werden soll habe ich bei dem oberen transparent auf true gesetzt, vor dem zeichnen des Rahmens (also in MouseDown) den brushstyle auf clear gesetzt. Gezeichnet wird so:
Delphi-Quellcode:
Bei manchen PCs funktioniert das, man sieht also das darunterliegende bild und auf dem Neuen nur das Grause, bei manchen allerdings sieht man auf dem oberen NUR weiss?
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin Image2.canvas.brush.style :=bsClear; if shift = [ssleft] then begin x1 := x; y1 := y; x2 := x; y2 := y; Image2.canvas.rectangle (x1,y1,x2,y2); end; end; procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if shift = [ssleft] then begin Image2.canvas.rectangle (x1,y1,x2,y2); y2 := round(y1 + (AufloesungY/AufloesungX) * (x-x1)); x2 := x; Image2.canvas.rectangle (x1,y1,x2,y2); end end; kann mir jemand sagen warum? lG Green |
Re: Transparentes Bild nicht überall Transparent...
warum ein zweites TImage? male doch einfach mit pen.Mode:=pmXOR ;) das gleiche rechteck nochmal malen und es ist wieder weg.
beispiel: ![]() bei komplizierteren formen auf ein Hintergrundbitmap malen und dieses per bitblt auf die Sichtbare fläche kopieren. z.b. wie da: ![]() HTH Frank |
Re: Transparentes Bild nicht überall Transparent...
Zitat:
Egal jedenfalls denn mit 2 bildern gehts auch wunderbar, und macht die speichereigenschaft (ich will den rahmen ja nicht mitspeichern) einfacher. Das Problem war einfach das ich vergessen hatte mittels
Delphi-Quellcode:
unsichtbar zu machen.
Image2.canvas.brush.style := bsSolid;
Image2.Canvas.FillRect(Image2.Canvas.ClipRect); Was mich jetzt nur wundert ist das es auf manchen PCs überhaupt geklappt hat... :gruebel: :gruebel: |
Re: Transparentes Bild nicht überall Transparent...
Zitat:
Zitat:
wenn du nicht nur den rahmen malen willst oder dich das Aussehen des Xor-Rahmens stören sollte, wäre ein hintergrundbitmap wie in dem 2. link von mir imho sinnvoller als ein transparentes TImage obendrüberzulegen... Frank |
Re: Transparentes Bild nicht überall Transparent...
Was ist denn das Problem mit dem Transparenten Image obendrüber?
Ich habe 2 TImages. Auf dem unteren wird gemalt, auf dem oberen der Rahmen gezeichnet. So jetzt soll man wie in IrfanView einen Rahmen auf das Bild ziehen können und der muss ja bei jeder mausbewegung gelöscht und neu gezeichnet werden. Da liegt doch das Problem: denn wenn ich auf dem schön gezeichneten Bild nen Rahmen zeichne und ihn wieder "lösche" dann hab ich doch das alte bild zerstört. Und das will ich nicht unbedingt. => Ein zweites Bild nehmen, die Farbe auf Transparent setzen und Auf diesem Bild Rahmen zeichnen und löschen. Jetzt nur warum sollte ich es denn ändern? Es klappt doch jetzt ^^ ich hatte nur vergessen es von wornehrein zu 'löschen'... lG Green |
Re: Transparentes Bild nicht überall Transparent...
das Problem ist, das es kein guter Stil ist und (wie du oben schon geschrieben hast) zu unerwarteten Phänomenen auf manchen Rechnern führen kann.
ich glaube nicht, dass du dir das Beispielprogramm angeschaut hast...mit dem Xor-Penmode kannst du das Rechteck ohne probleme wieder löschen. Bei jeder Mausbewegung wird der alte Rahmen gelöscht (durch nochmaliges Malen), die Koordinaten des Rechtecks neu berechnet (anhand der Mausposition) und ein neuer Rahmen gemalt. ist nicht wirklich viel mehr Arbeit als mit dem zweiten Image. Irfanview macht das sicher auch so ähnlich, ggf. wie in meinem zweitem Beispiel mit dem temporär-bitmap. Dieses Temporärbitmap ist zwar bisschen mehr Arbeit, gibt einem aber auch viele Möglichkeiten, wie dort zu sehen. Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 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