AGB  ·  Datenschutz  ·  Impressum  







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

Pen : Farbe ändern

Ein Thema von Sebastian Nintemann · begonnen am 19. Jun 2002 · letzter Beitrag vom 22. Jun 2002
Antwort Antwort
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#1

Pen : Farbe ändern

  Alt 19. Jun 2002, 18:06
hallo!

also ich hab ein simples Problem:

Ich erzeuge mit
Code:
 pen := CreatePen(PS_SOLID,5,rgb(r,g,b));
Einen Pen und setze ihn mit

Code:
  SelectObject(DC,pen);
in meinen dc ein. Wie kann ich nun die Farbe des Pens ändern?
Ich benutze Win9x.


Viele Grüße, Sebastian
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2
  Alt 19. Jun 2002, 18:21
Du könntest via "GetObject" wieder auf den Pen zugreifen. Hierzu ein Auszug aus dem PSDK:
Code:
int GetObject(
  HGDIOBJ hgdiobj, // handle to graphics object
  int cbBuffer,    // size of buffer for object information
  LPVOID lpvObject // buffer for object information
);
"lpvObject" ist dann eine Referenz auf eine TLogPen-Struktur, welche u.A. die Farbe des Stiftes enthält. Damit müsstest Du sie dann ändern können. Und anschliessend ist bestimmt wieder ein Aufruf von "SelectObject(...)" nötig.

Vielleicht hilft's ja...


Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 19. Jun 2002, 19:51
Wo ist das Problem? So wie du ihn erzeugt hast, einfach einen neuen einsetzen.

Aber nicht vergessen ihn mit DeleteObject wieder zu löschen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#4
  Alt 21. Jun 2002, 17:03
Danke schonmal für die Antworten, ich habs auch jetzt so gemacht dass ich jedesmal einen neuen Pen einsetze. Allerdings: Das ganze ist in einer Schleife (man malt quasi mit einem Stift der immer seine Farbe ändert (per random)). Die ersten 5 Sekunden geht das gut, dann ändert der Stift seine Farbe nicht mehr, hab keine Ahnung woran das liegt. Ich dachte es gäbe vielleicht etwas wie SetDCPenColor (das gibts nur in win NT/2000/XP).
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 21. Jun 2002, 17:06
Kann daranliegen, dass ihm die Ressourcen ausgehen. Das Problem habe ich auch mit einem Programm. da wird in WM_PAINT gemalt und wenn man das Fenster so 30 - 50 mal minimiert und wieder hergstellt hat wars das mit den Farben.

Zeig uns doch mal deine Schleife.

Eventuell hilft es das Objekt erst wieder zu löschen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#6
  Alt 22. Jun 2002, 13:32
Also, die Schleife:

Code:
 
for i := 1 to 1000 do
    begin
      pen := CreatePen(PS_SOLID,5,rgb(r,g,b));
      SelectObject(DC,pen);

      GetCursorPos(p);
      LineTo(DC,p.x,p.y);
      r := r+random(21)-10;
      g := g+random(21)-10;
      b := b+random(21)-10;

      if r<0 then r:=0 else if r>255 then r:=255;
      if g<0 then g:=0 else if g>255 then g:=255;
      if b<0 then b:=0 else if b>255 then b:=255;

      sleep(100);
      WriteLn(inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
     
      DeleteObject(pen);  
    end;

Dabei verbessert oder verschlechtert sich das Ergebnis bei variationen wie zb weglassen oder hinzufügen von sleep, mit verschiedenen millisekunden Zahlen, durch hinzufügen von WriteLn (ist ne Konsole), durch ändern der Durchlaufzahl etc.

r, g und b machen das was ich will, nämlich sich dauernd ändern, nur die angezeigte Farbe ändert sich mal garnicht, mal nur in den ersten Sekunden so wie es sein sollte, und danach garnicht mehr, oder mal nach ein paar Sekunden schlagartig. ISt wohl zu schnell für den armen Computer,lol

Ach ja, habs auch mit und ohne DeleteObject versucht, passiert nichts.

Gruß Sebastian
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7
  Alt 22. Jun 2002, 13:44
Muss man das nicht eigentlich so machen:
Code:
pen := CreatePen(PS_SOLID,5,rgb(r,g,b));
oldPen = SelectObject(DC,pen); // <<-- hier, das meine ich    
{ Dein Code }
SelectObject(DC, oldPen); // <<-- und das auch
DeleteObject(pen);
Zumindest steht im PSDK, dass man keine GDI-Objekte löschen soll, die noch in einen Gerätekontext selektiert sind. Also wird es vielleicht gar nicht gelöscht.
Konnte ich leider nicht nachprüfen, weil mein Taskmanager hat für das Testprogramm immer 38 Handles angezeigt, egal ob ich den immer freigegeben hab' oder nicht ;c)
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  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: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