AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zu Pen und Brush

Ein Thema von delphifan2004 · begonnen am 12. Nov 2015 · letzter Beitrag vom 12. Nov 2015
Antwort Antwort
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
266 Beiträge
 
Delphi 10.3 Rio
 
#1

Verständnisfrage zu Pen und Brush

  Alt 12. Nov 2015, 19:04
Hallo,

ich experimentiere gerade wieder mal mit native WIN API. Da tut sich folgendes Problem auf, das ich zunächst mit etwas Code zeigen will:

Code:
        RedBrush := CreateSolidBrush(RGB(255, 0, 0));
        RedBrushOld := SelectObject(WndDC, RedBrush);
        Rectangle(WndDC, 80, 10, 100, 90);
Nun seien im Programm mehrere Rechtecke mit unterschiedlichen Farben gefüllt worden nur nicht Rot.

Zum Beispiel:
Delphi-Quellcode:
        SelectObject(WndDC, GreenHatchBrushOld);
        DeleteObject(GreenHatchBrush);
Nun aber will ich wieder ein Rechteck mit roter Farbe füllen.

Delphi-Quellcode:
       SelectObject(WndDC, RedBrushOld);
       RoundRect(WndDC, 30, 220, 180, 350, 35, 35);
Dieses Füllen funktioniert aber nicht. Ich verwende ein Demo, bei dem ich nun die Farbe eines schon mal gezeichneten Rechteckes verändern will.

Was mache ich da falsch?

Mit SelectObject verwendet Widows zwar den gleichen Device-Context. Dies aber hat doch nicht etwa Auswirkungen auch bereits erzeugte Objekte?
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: Verständnisfrage zu Pen und Brush

  Alt 12. Nov 2015, 19:24
SelectObject(WndDC, RedBrushOld);
RoundRect(WndDC, 30, 220, 180, 350, 35, 35);

In "SelectObject" vor dem Zeichnen gehört immer das "neue" auszuwählende Object!
In "SelectObject" vor dem Freigeben gehört immer ein default(GetStockObject)/anderes/"altes"(..Old) Object!

//-----------------------------------------------------
OldBrush:=SelectObject(WndDC, GetStockObject(BLACK_BRUSH)); // DummySelect nur zum Abholen des vorherigen Brush
RedBrush := CreateSolidBrush(RGB(255, 0, 0));
BlueBrush := CreateSolidBrush(RGB(0,255, 0));
GreenBrush := CreateSolidBrush(RGB(0,0,255));
//-----------------------------------------------------

SelectObject(WndDC, RedBrush);
Rectangle(WndDC, 80, 10, 100, 90);

SelectObject(WndDC, BlueBrush);
Rectangle(WndDC, 180, 110, 200, 190);

SelectObject(WndDC, GreenBrush);
Rectangle(WndDC, 280, 210, 300, 290);

SelectObject(WndDC, RedBrush);
RoundRect(WndDC, 330, 320, 480, 350, 35, 35);

SelectObject(WndDC, BlueBush);
RoundRect(WndDC, 430, 420, 580, 450, 35, 35);

SelectObject(WndDC, GreenBrush);
RoundRect(WndDC, 530, 520, 680, 550, 35, 35);

//-----------------------------------------------------
SelectObject(WndDC, OldBrush);
DeleteObject(GreenBrush);
DeleteObject(BlueBrush);
DeleteObject(RedBrush);
//-----------------------------------------------------
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Verständnisfrage zu Pen und Brush

  Alt 12. Nov 2015, 19:36
Prinzipielles Vorgehen:
1. Alten Brush merken (sichern)
2. Neuen Brush erstellen
3. Mit neuen Brush was machen, ist so lange gültig bis neuer Brush erstellt oder alter Brush wieder hergestellt wird
4. Alten Brush wieder zu weisen, wenn mit allen fertig.

Analogie Pinsel und Farbkasten. Ich merke mir welche Farbe ich vorher am Pinsel hatte. Tauchen den Pinsel in die neue Farbe. Male damit rum. jetzt bin ich damit fertig und machen den Pinsel im Wasser sauber (DeleteObject) und tauche ihn wieder in die gemerkte Farbe.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (12. Nov 2015 um 19:38 Uhr)
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
266 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Verständnisfrage zu Pen und Brush

  Alt 12. Nov 2015, 20:30
Danke beiden. Wenn ich so vorgehe, funktioniert es. Ich werd jetzt erst mal ein wenig damit rumspielen um da sicher zu werden.
  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 18:33 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