AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Transparentes Bild nicht überall Transparent...
Thema durchsuchen
Ansicht
Themen-Optionen

Transparentes Bild nicht überall Transparent...

Ein Thema von Green · begonnen am 11. Jan 2008 · letzter Beitrag vom 14. Jan 2008
Antwort Antwort
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#1

Transparentes Bild nicht überall Transparent...

  Alt 11. Jan 2008, 20:52
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:
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;
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?
kann mir jemand sagen warum?

lG Green
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Transparentes Bild nicht überall Transparent...

  Alt 12. Jan 2008, 07:14
warum ein zweites TImage? male doch einfach mit pen.Mode:=pmXOR das gleiche rechteck nochmal malen und es ist wieder weg.
beispiel: http://www.fw-web.de/download.php?ac...pSelection.zip

bei komplizierteren formen auf ein Hintergrundbitmap malen und dieses per bitblt auf die Sichtbare fläche kopieren.
z.b. wie da: http://www.delphi-forum.de/viewtopic...=383875#383875

HTH Frank
  Mit Zitat antworten Zitat
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#3

Re: Transparentes Bild nicht überall Transparent...

  Alt 12. Jan 2008, 11:05
Zitat von _frank_:
warum ein zweites TImage? male doch einfach mit pen.Mode:=pmXOR das gleiche rechteck nochmal malen und es ist wieder weg.
beispiel: http://www.fw-web.de/download.php?ac...pSelection.zip
ist denn dann das was davor gemalt wurde wieder sichtbar??

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:
  Image2.canvas.brush.style := bsSolid;
  Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
unsichtbar zu machen.

Was mich jetzt nur wundert ist das es auf manchen PCs überhaupt geklappt hat...
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Transparentes Bild nicht überall Transparent...

  Alt 12. Jan 2008, 18:05
Zitat von Green:
Zitat von _frank_:
...das gleiche rechteck nochmal malen und es ist wieder weg.
ist denn dann das was davor gemalt wurde wieder sichtbar??
du willst doch nur ein rechteck malen, oder nicht? Was wurde denn zuvor gemalt? die koordinaten von dem rechteck kannst du dir doch merken und ggf. neu malen ohne drag&drop...versteh nicht ganz, was du machen willst...

Zitat von Green:
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:
  Image2.canvas.brush.style := bsSolid;
  Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
unsichtbar zu machen.

Was mich jetzt nur wundert ist das es auf manchen PCs überhaupt geklappt hat...
vielleicht solltest du mal einen Screenshot anhängen, damit wir wissen, wie es ist und wie es sein sollte.
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
  Mit Zitat antworten Zitat
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#5

Re: Transparentes Bild nicht überall Transparent...

  Alt 14. Jan 2008, 17:35
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
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#6

Re: Transparentes Bild nicht überall Transparent...

  Alt 14. Jan 2008, 18:42
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
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