AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi [TPaintBox] - "Hintergrundfarbe" für Pen.Style := psDot
Thema durchsuchen
Ansicht
Themen-Optionen

[TPaintBox] - "Hintergrundfarbe" für Pen.Style := psDot

Ein Thema von xZise · begonnen am 6. Jan 2007 · letzter Beitrag vom 8. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[TPaintBox] - "Hintergrundfarbe" für Pen.Style :=

  Alt 6. Jan 2007, 22:26
Ich erzeuge eine Linie (also eigentlich 4 ) auf einer TPaintBox, worauf ich zuvor ein BitMap kopiert hab. So sieht die "Paint"-Routine aus:
Delphi-Quellcode:
procedure TfrmMain.pbMapPaint(Sender: TObject);
begin
  BitBlt(pbMap.Canvas.Handle, xDis, yDis, bMap.Width, bMap.Height, bMap.Canvas.Handle, 0, 0, SrcCopy);
  if (selectRect.X >= 0) and (selectRect.Y >= 0) then begin
     pbMap.Canvas.MoveTo((selectRect.X * 32) + xDis, (selectRect.Y * 32) + yDis);
    pbMap.Canvas.LineTo(((selectRect.X + 1) * 32) + xDis, (selectRect.Y * 32) + yDis);
    pbMap.Canvas.LineTo(((selectRect.X + 1) * 32) + xDis, ((selectRect.Y + 1) * 32) + yDis);
    pbMap.Canvas.LineTo((selectRect.X * 32) + xDis, ((selectRect.Y + 1) * 32) + yDis);
    pbMap.Canvas.LineTo((selectRect.X * 32) + xDis, (selectRect.Y * 32) + yDis);
  end;
end;
Zuvor ist natürlich der Style des Pens auf "psDot" gesetzt. Dummerweise zeichnet er aber die Zwischenräume mit der .Color-Eigenschaft der TpaintBox. Kann ich irgendwie sagen, dass das Durchsichtig sein soll?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 6. Jan 2007, 23:54
er zeichnet die Zwischenräume mit deiner Brush.Color. Wenn du das nicht willst, dann setze den Stil vom Brush auf bsClear.Canvas.Brush.Style := bsClear;
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 00:11
könnte ich auch irgendwie die paintbox mit ner bestimmten farbe durchsichtig machen???
Martin
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 02:31
Zitat von lbccaleb:
könnte ich auch irgendwie die paintbox mit ner bestimmten farbe durchsichtig machen???
Grundsätzlich: Male an den Stellen einfach nichts, wo es durchsichtig sein sollte.

Bei deinem Bitmap was du als erstes malst kannst du eine entsprechende TransparentColor einstellen. Dann musst du aber auf die Methode Draw() zurück greifen, da BitBlt() diese Eigenschaft nicht beachtet.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 02:47
ich habe mir mit tpaintbox eine animierte komponente gebastelt, die quasi ein bmp frame für frame per timer durchläuft, dort kann ich das ja nicht anwenden, wie mach ich das in solch einem fall??
Martin
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 02:52
Da würde ich eine eigene Komponente bauen - direkt abgeleitet von TGraphicControl. Da du bei den unsichtbaren Bereichn wahrscheinlich unterschiedliche Flächen haben wirst während der Animation, musst du vor dem Zeichnen eines neuen Frames den Hintergrund neu zeichnen. Das bedeutet dann, die darunter liegende Komponente muss neu gezeichnet werden - zumindest in dem Bereich wo deine Komponente liegt. Da du kein Fensterhandle hast bei einem TGraphicControl und dir der Parent einfach nur einen Teil seines Canvas dir zum zeichnen überlässt, kann dieses neuzeichnen vor der neuen Frame recht langwierig sein. Daher wäre es wohl einfacher von TCustomControl abzuleiten. Dort hast du dein eigenes Fenster und kannst dann mit Invalidate und Update schneller zu einem solchen Verhalten kommen. Das müßtest du aber wohl mal im Detail ausprobieren.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 02:58
mir würde es reichen wenn ich eine farbe (die egal ist, kann bmp noch ändern) transparent darstellen kann, bevor neu in die paintbox gezeichnet wird..
Martin
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 09:26
Naja Ich will dich nicht ärgern, aber ich habe die Brush-Farbe und den Brush-Style "abnormalisiert" ohne Änderung...

Liegt es ggf. an "BitBlt"?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 15:31
1. wenn du das einmal in die Paintbox gezeichnet hast, dann müsstest du bei Änderung der Position der transparenten Bereiche die alten gemalten Pixel weg bekommen. Transparent heisst aber nun mal nicht, dass er dort was "transparentes" hinmalt an der Stelle sondern er das malen dort auslässt.
2. Wenn du nur eine Farbe in dem Bitmap Transparent haben willst, dann setz die entsprechende Eigenschaft des Bitmaps (wie ich oben schon geschrieben hatte). Delphi-Referenz durchsuchenTBitmap.TransparentMode, Delphi-Referenz durchsuchenTBitmap.TransparentColor, Delphi-Referenz durchsuchenTBitmap.Transparent.
3. Wenn du die Transparent-Eigenschaft des TBitmaps verwendest, dann musst du das BitBlt() durch Draw() ersetzen, weil BitBlt() von WinAPI nichts von TBitmap der VCL weiss und sich somit auch nicht darum kümmert. Auch dieses hatte ich oben schon geschrieben.
4. @xZise: Die Farbe des Brushes ist egal, wenn du Brush.Style auf bsClear stellst. Du kannst auch beim Canvas folgendes machen, aber eigentlich ist dies nicht nötigt: SetMode(Canvas.Handle, TRANSPARENT);
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: [TPaintBox] - "Hintergrundfarbe" für Pen.Style

  Alt 7. Jan 2007, 16:46
Zitat von Muetze1:
1. wenn du das einmal in die Paintbox gezeichnet hast, dann müsstest du bei Änderung der Position der transparenten Bereiche die alten gemalten Pixel weg bekommen. Transparent heisst aber nun mal nicht, dass er dort was "transparentes" hinmalt an der Stelle sondern er das malen dort auslässt.
Und was heißt das?

Zitat von Muetze1:
2. Wenn du nur eine Farbe in dem Bitmap Transparent haben willst, dann setz die entsprechende Eigenschaft des Bitmaps (wie ich oben schon geschrieben hatte). Delphi-Referenz durchsuchenTBitmap.TransparentMode, Delphi-Referenz durchsuchenTBitmap.TransparentColor, Delphi-Referenz durchsuchenTBitmap.Transparent.
Und wie komme ich an das Bitmap eines PaintBox?
Achtung: Ich rede nicht vom Quellbitmap! Ich rede vom "eingefügten" Bitmap!
(Aber selbst wenn, würde es nicht viel bringen, siehe unten)

Zitat von Muetze1:
3. Wenn du die Transparent-Eigenschaft des TBitmaps verwendest, dann musst du das BitBlt() durch Draw() ersetzen, weil BitBlt() von WinAPI nichts von TBitmap der VCL weiss und sich somit auch nicht darum kümmert. Auch dieses hatte ich oben schon geschrieben.
Aber das ergibt keinen sinn (aus zwei Gründen):
1. Würde ich es vor
oder 2. würde ich es
nach dem kopieren selber einzeichenen. Und ich möchte es ja nicht transparent haben, dass man die unterliegende Form sieht.
Sondern ich würde gerne ein BitMap haben, mit einen Quadrat, welcher durch eine gestrichelte Line dargestellt wird.

Zitat von Muetze1:
4. @xZise: Die Farbe des Brushes ist egal, wenn du Brush.Style auf bsClear stellst. Du kannst auch beim Canvas folgendes machen, aber eigentlich ist dies nicht nötigt: SetMode(Canvas.Handle, TRANSPARENT);
Das mag sein, aber wenn er das nicht "cleared", dann müsste wenigstens die Farbe zu sehen sein.
Außer irgendwo ist "clBtnFace" als Standard definiert.

In Punkt 3 siehts du was ich möchte, da deine Beispiele hier an sich nichts bringen.

Ich suche eigentlich nur eine Möglichkeit, dass er ein bisschen zeichnet, und dann wieder ein bisschen nicht.
Aber ich sehe schon dass ich es selber machen muss. Und solange es sich um Parallelen zu den Bildschirmrändern hält.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:24 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