Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi SelectObject(hDC, hPen) (https://www.delphipraxis.net/615-selectobject-hdc-hpen.html)

d3g 13. Aug 2002 18:22


SelectObject(hDC, hPen)
 
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]

Luckie 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.

d3g 13. Aug 2002 20:10

:D :D :D

Danke!

[edit]PS. Wie ich geschrieben habe, der Pen war schon erstellt.[/edit]

Luckie 13. Aug 2002 20:12

Nur damit du noch mal kuckst und die Änderungen mit bekommst. :mrgreen:

d3g 14. Aug 2002 07:53

Hi Luckie,

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

Zitat:

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

...

Zitat:

Zitat von d3g
LIME_PEN und COLOR_BLACK sind korrekte Werte, SelectObject() funktioniert.

MfG,
d3g

Luckie 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 :angle2:.

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.

d3g 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

Luckie 14. Aug 2002 10:27

:hi:
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?

d3g 14. Aug 2002 10:46

Zitat:

Zitat von d3g
:D :D :D
Danke!

Das dürfte als Antwort reichen ;-)

Luckie 14. Aug 2002 10:50

:mrgreen:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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