AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

GetDC, Canvas, bsclear

Ein Thema von simjoh · begonnen am 7. Jul 2007 · letzter Beitrag vom 13. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2   
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#1

GetDC, Canvas, bsclear

  Alt 7. Jul 2007, 00:48
Hi,

ich sende per

Code:
Canvas.Handle := GetDC(FremdesFenster.Handle);
und
Code:
Canvas.TextRect(TheRect,x,y,Str);
einen String Str an ein FemdesFenster. Den Hintergrund des Canvas mache ich mit
Code:
C.brush.style:=bsclear;
transparent. Nun wird alle paar Sekunden was Neues auf das fremde Fenster geschrieben.
Nun würde ich gerne den vorher geschriebenen Text löschen, weil der sonst immer auf dem fremden Fenster bleibt und nur vom neuen Text überschrieben wird, der Hintergrund wird ja nicht neu gezeichnet. Ne Idee, wie man sowas machen kann?

Schanke Dön!!
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: GetDC, Canvas, bsclear

  Alt 7. Jul 2007, 04:13
Hi,

du kannst ja mal versuchen ob ein RedrawWindow() hilft.
Mit Hier im Forum suchenInvalidateRect könntest du es ansonsten auch noch versuchen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: GetDC, Canvas, bsclear

  Alt 7. Jul 2007, 13:25
oder du speicherst dir den Hintergrund und malst ihn auch immer mit zurück.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: GetDC, Canvas, bsclear

  Alt 7. Jul 2007, 23:08
Hm, beides klingt gut, ich hab aber keine Ahnung, wie ich das umsetzen soll.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: GetDC, Canvas, bsclear

  Alt 8. Jul 2007, 00:04
Für InvalidateRect():
Delphi-Quellcode:
var
  Rect: TRect;
begin
  GetWindowRect(FremdesFenster.Handle, Rect);
  Rect.Bottom:= Rect.Bottom- Rect.Top;
  Rect.Right:= Rect.Right- Rect.Left;
  Rect.Top:= 0;
  Rect.Left:= 0;
  invalidateRect(FremdesFenster.Handle, @Rect,true);
Die Größe des Bildausschnitts welcher aktualisiert werden soll, kannst du selber noch verkleinern.

Für RedrawWindow():
   RedrawWindow(FremdesFenster.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN); Da wird gleich das gesamte Fenster sowie allen WinControls darauf neugezeichnet.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#6

Re: GetDC, Canvas, bsclear

  Alt 8. Jul 2007, 00:16
kleine Bemerkung am Rande...
Zitat von bitsetter:
Für InvalidateRect():
invalidateRect(FremdesFenster.Handle, @Rect,true); Die Größe des Bildausschnitts welcher aktualisiert werden soll, kannst du selber noch verkleinern.
dazu ist mir beim Screencanvas (GetDC(0)) aufgefallen, dass scheinbar der gesamte Screen refresht wird (trotz kleinerem bereich via Rect) => flackernde Desktopsymbole.

ich habe das gebaucht, um ein gitter, welches über ein form inkl. aller darauf befindlichen Controls gemalt (konnte also das form.canvas nicht verwenden) wurde, wieder zu löschen.
in dem Fall gings nur mit RedrawWindow sauber...invalidaterect auf das form-Handle angewand, hat nur das form, aber nicht die Controls darauf neu gezeichnet...

hing da auch ne Weile dran

Gruß Frank
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: GetDC, Canvas, bsclear

  Alt 8. Jul 2007, 22:20
Hi,

danke für die Tipps, aber beim Test gerade flackert bei beiden Versionen der Bildschirm, weil offensichtlich ständig das gesamte Fenster refresht wird. Bei
RedrawWindow(FremdesFenster.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN); wie wird denn da das refreshen auf das Rect beschränkt? Oder is das ne dumme Frage?

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: GetDC, Canvas, bsclear

  Alt 8. Jul 2007, 22:42
Hi,

Delphi-Quellcode:
var
  Rect: TRect;
begin
  GetWindowRect(Handle, Rect);
  Rect.Bottom:= Rect.Bottom- Rect.Top;
  Rect.Right:= Rect.Right- Rect.Left;
  Rect.Top:= 0;
  Rect.Left:= 0;
  RedrawWindow(FremdesFenster.Handle, @Rect, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
Den Bildausschnitt müsstest du dann noch anpassen;

Du sagst das flackert, hast du etwa versucht den Desktop neu zu zeichnen oder etwa ein anderes Fenster? Wenn der ganze Bildschirm flackert wird meistens der Desktop neugezeichnet. Normalerweise wird aber nur ein Ausschnitt vom fremden Fenster aktualisiert.

Zitat von simjoh:
wie wird denn da das refreshen auf das Rect beschränkt?
Da war kein Rect angegeben, also würde das komplette Fenster neu gezeichnet werden.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#9

Re: GetDC, Canvas, bsclear

  Alt 9. Jul 2007, 00:11
wie ich schon sagte, ich hab das Screen-Canvas (getDC(0)) verwendet und InvalidateRect mit der Position meines zu refreshenden Fensters gefüttert...
mit RedrawWindow hats dann super funktioniert...

pseudocode (wo die Symbole geflackert haben):
Delphi-Quellcode:
GetWindowRect(Handle, Rect);
invalidateRect(GetDC(0), @Rect,true);
gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: GetDC, Canvas, bsclear

  Alt 9. Jul 2007, 00:27
Hi,

bei deinem Code passiert bei mir gar nichts. Müsste es nicht eher so geheninvalidateRect(WindowFromDC(0), @Rect, true); dann flackert jedoch garantiert der ganze Bildschirm kurz auf.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf