AGB  ·  Datenschutz  ·  Impressum  







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

SelectObject(hDC, hPen)

Ein Thema von d3g · begonnen am 13. Aug 2002 · letzter Beitrag vom 14. Aug 2002
Antwort Antwort
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#1

SelectObject(hDC, hPen)

  Alt 13. Aug 2002, 18:22
Hallo Forum,

ja, schon wieder ich und meine Device Contexts... Also, alles was ich will, ist mit bestimmtem Font und bestimmten Vorder- und Hintergrundfarben mit DrawText etwas auf einen DC zu zeichnen. Das mit dem Font funktioniert auch, nur mit Pen und Brush hab ich meine Probleme.

Code:
  winDC := GetDC(hWnd);
  Font := CreateFont(-MulDiv(8, GetDeviceCaps(winDC, LOGPIXELSY), 72),
                     0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
                     CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
                     'MS Sans Serif');

  SelectObject(winDC, Font);
  SelectObject(winDC, PEN_LIME);
  SelectObject(winDC, COLOR_BLACK);
  DrawText(winDC, PChar(s), Length(s), r, DT_TOP or DT_RIGHT);
  DeleteObject(Font);
  ReleaseDC(hWnd, winDC);
LIME_PEN und COLOR_BLACK sind korrekte Werte, SelectObject() funktioniert. GetStockObject führt nur dazu, dass SelectObject() fehlschlägt.

Ich hoffe, ihr könnt mir helfen.

Danke im Voraus,
d3g

[edit]Da hat was mit dem Code-Kopieren nicht geklappt...[/edit]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 13. Aug 2002, 20:01
Also....
Das Ding mit dem Pen: Das ist nur zum Zeichnen von Lienen und Kurven gedacht.

Wenn du die Hintergrundfarbe und Schriftfarbe ändern willst, dann sind SetBkColor und SetTextColor deine Freunde. Beispiel:
Code:
var
  winDC: HDC;
  Font, oldFont: HFONT;
  s: String;
  r: TRECT;
  myPen, oldPen: HPEN;
begin
  r.Top := 10;
  r.Left := 10;
  r.Right := 100;
  r.Bottom := 50;
  s := 'dkfjavgkdjfbvkjadf';
  winDC := GetDC(Handle);
  SetBkColor(winDC, RGB(255,0,0));
  SetTextColor(winDC, RGB(0,255,0));
  Font := CreateFont(-MulDiv(12, GetDeviceCaps(winDC, LOGPIXELSY), 72),
                     0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
                     CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
                     'MS Sans Serif');

  oldFont := SelectObject(winDC, Font);
  DrawText(winDC, PChar(s), Length(s), r, DT_TOP or DT_RIGHT);
  SelectObject(winDC, oldFont);
  DeleteObject(Font);

  myPen := CreatePen(PS_DASHDOTDOT, 1, RGB(0,255,0));
  oldPen := SelectObject(winDC, myPen);
  MoveToEx(winDC, 50, 50, nil);
  LineTo(winDC, 150,150);
  SelectObject(winDC, oldPen);
  DeleteObject(myPen);

  ReleaseDC(Handle, winDC);
end;
Desweiteren war dein Versuch etwas daneben. Bei SelectObject muß man erst mal überhaupt ein Objekt erstellen. Also bei dem Ding mit dem Pen wäre das CreatePen, siehe Code.

Dann wird noch empfohlen vor dem Löschen des Objektes erst wieder das alte Objekt einzusetzen, sieh Code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#3
  Alt 13. Aug 2002, 20:10


Danke!

[edit]PS. Wie ich geschrieben habe, der Pen war schon erstellt.[/edit]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 13. Aug 2002, 20:12
Nur damit du noch mal kuckst und die Änderungen mit bekommst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#5
  Alt 14. Aug 2002, 07:53
Hi Luckie,

ich glaub, wir reden aneinander vorbei. Was ich meinte ist diese Äußerung von dir:

Zitat von Luckie:
Desweiteren war dein Versuch etwas daneben. Bei SelectObject muß man erst mal überhaupt ein Objekt erstellen.
...

Zitat von d3g:
LIME_PEN und COLOR_BLACK sind korrekte Werte, SelectObject() funktioniert.
MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 14. Aug 2002, 10:01
Ach LIME_PEN und COLOR_BLACK sind Variablen wie mein myPen vom Typ HPEN oder wie? Ich habe es für Konstanten gehalten wegen der Schreibweise. Die Konstanten von CreateFont und DrawText hast du auch alle so geschrieben und es ist auch allgemein üblich sie groß zu schreiben und Unterstriche zu verwenden. Das mache ich nämlich auch immer so. Na dann ist ja alles in Ordnung, dann ziehe ich hier mit meinen Vorwurf zurück .

Aber denk dran: Vor dem Löschen erst das alte Objekt wieder einsetzen. Hat bei mir zwar noch nie zu Problemen geführt, wenn ich es nicht mache, aber Microsoft emfiehlt es so.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#7
  Alt 14. Aug 2002, 10:10
Hi Luckie,

die Schreibweise habe ich dem Brush COLOR_APPWORKSPACE und dem Pen DC_PEN angelehnt, sind aber beides HBRUSH und HPEN.

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8
  Alt 14. Aug 2002, 10:27

Und genau damit hast du mich verwirrt, denn COLOR_APPWORKSPACE ist eien Konstante.

Aber das Mißverständnis wäre ja geklärt.

War es denn das, was du gesucht hast: SetBkColor und SettextColor?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#9
  Alt 14. Aug 2002, 10:46
Zitat von d3g:

Danke!
Das dürfte als Antwort reichen
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10
  Alt 14. Aug 2002, 10:50


Ich denke da werd eich dem nächst noch mal meine Tutorials ergänzen müssen: Direkte Ausgaben auf dem Canvas von Text und Zeichnen. Demo-Programme hab eich da schon muß nur noch das Tutorial schreiben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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:40 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