AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Screen-Canvas nur über form refreshen
Thema durchsuchen
Ansicht
Themen-Optionen

Screen-Canvas nur über form refreshen

Ein Thema von _frank_ · begonnen am 1. Jul 2007 · letzter Beitrag vom 1. Jul 2007
Antwort Antwort
Benutzerbild von _frank_
_frank_

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

Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 19:03
Hallo,
ich versuche folgendes zu realisieren:
ich möchte auf meinem Formular ein Grid malen (Hilflinien zur orientierung), aber über alle Controls hinweg. Somit nützt mir TForm.Canvas nicht wirklich etwas.
Also male ich direkt auf dem Screen-Canvas (getDC(0)), funktioniert problemlos.
Um dies zu löschen verwende ich aktuelle diesen code:
Delphi-Quellcode:
var r:Trect;
begin
  if cfg.DrawAlignGrid then
  begin
    r:=Rect(left,top,left+width,top+height);
    invalidateRect(0,@r,true);
  end;
dies funktioniert zwar, hat aber den unschönen nebeneffekt, dass um das fenster herum (also der komplette desktop) alles kurz flackert, obwohl ich explizit das rect des forms angebe. Warum ist das so bzw. wie könnte man das lösen?

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

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

Re: Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 19:33
Hi,

und wenn du nur das Formular neuzeichnest, geht es dann?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Rect: TRect;
begin
  Rect:= self.ClientRect;
  invalidateRect(Form1.Handle, @Rect,true);
end;
EDIT:
Delphi-Quellcode:
var
  loop : integer;
begin
  //With Form1 do
  for loop:= 0 to Pred(ControlCount) do
    if Components[loop] is TWinControl then
       TWinControl(Components[loop]).Invalidate;
  Invalidate;
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
 
#3

Re: Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 19:41
nicht ganz, es wird nur das form selbst refresht, aber die darauf befindlichen TWinControls nicht

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

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

Re: Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 19:43
Ich habe weiter oben gerade noch Code hinzugefügt(roter Kasten).
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
 
#5

Re: Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 19:52
danke bitsetter.
wenn man das ganze noch rekursiv baut funktioniert es auch super:

Delphi-Quellcode:
procedure InvalidateControl(control:TWincontrol);
var i:integer;
begin
  control.Invalidate;
  for i:=0 to control.ControlCount-1 do
    if (control.Controls[i] is TWinControl) then
      InvalidateControl(control.Controls[i] as TWinControl);
end;

procedure TForm_DFMPreview.SizeCtrl1EndSizeMove(Sender: TObject;
  State: TSCState);
var r:Trect;
begin
  if cfg.DrawAlignGrid then
  begin
    invalidateControl(self);
  end;
end;
Gruß Frank
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 20:15
Hallo Frank,

hier ist noch eine Möglichkeit:

Delphi-Quellcode:
procedure InvalidateControl (aControl: TWinControl);
const
  FLAGS = RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN;
begin
  RedrawWindow(aControl.Handle, nil, 0, FLAGS);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Screen-Canvas nur über form refreshen

  Alt 1. Jul 2007, 20:29
danke hawkeye,
die Lösung ist natürlich das i-tüpfelchen (spar ich mir die separate procedure inkl. rekursion).

Frank
  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 14:14 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