AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Refresh auf Teilbereich eingrenzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Refresh auf Teilbereich eingrenzen?

Ein Thema von PeterPanino · begonnen am 22. Aug 2006 · letzter Beitrag vom 22. Aug 2006
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Refresh auf Teilbereich eingrenzen?

  Alt 22. Aug 2006, 00:45
Hallo,

ich habe ein größeres Panel (TBRSFramePanel), auf dem sich mehrere Steuerelemente befinden. Um eines der Steuerelemente wird ein Rahmen gezeichnet und das Panel dann mit Refresh neu gezeichnet. Das führt aber zu einem unerwünschten Flackern aller Steuerelemente, die sich auf dem Panel befinden.

Wie kann man nun das Refresh auf einen bestimmten Teilbereich des panels eingrenzen, sodass nicht das gesammte Panel "refreshed" wird sondern nur der gewünschte Bereich (das Steuerelement mit dem Rahmen).

Ich habe jetzt mehrere Stundne lang eine Lösung gesucht, aber nichts Funktionierendes gefunden.
Vielen Dank im Voraus!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Refresh auf Teilbereich eingrenzen?

  Alt 22. Aug 2006, 00:55
Von der WinAPI her geht dies mit dem InvalidateRect() Befehl, wo du den Bereich angeben kannst. Ansonsten ist die Frage wie das Panel den Clipping Bereich des Canvas zu nutzen weiss. Nach dem InvalidateRect() sollte das schon alles reichen, du kannst aber sonst nocht mit einem anschliessendem UpdateWindow() ein sofortiges neuzeichnen erzwingen...
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Refresh auf Teilbereich eingrenzen?

  Alt 22. Aug 2006, 01:04
InvalidateRgn habe ich schon probiert, scheint aber nicht zu funktionieren:
Delphi-Quellcode:
BRSFramePanel.DoubleBuffered := True;
ARect := AControl.BoundsRect;
InflateRect(ARect, 2, 2);
MyRgn := CreateRectRgn(Arect.Left, Arect.Top, Arect.Right, Arect.Bottom);
InvalidateRgn(BRSFramePanel.Canvas.Handle, MyRgn, False);

//Rahmen zeichnen

//Dann verschiedene Methoden probiert:
  //BRSFramePanel.Repaint;
  //SendMessage(BRSFramePanel.Canvas.Handle, WM_PAINT, 0, 0);
  //BRSFramePanel.Update;
  //PostMessage(BRSFramePanel.Canvas.Handle, WM_PAINT, 0, 0);
  //BRSFramePanel.Repaint;
  //PaintRgn(BRSFramePanel.Canvas.Handle, MyRgn);

//Aber nichts funktioniert!

DeleteObject(MyRgn);
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Refresh auf Teilbereich eingrenzen?

  Alt 22. Aug 2006, 01:27
1. Ich hatte von InvalidateRect() und InvalidateRgn() gesprochen. Macht aber soweit keinen Unterschied.
2. Wenn du ihm das komplette Rechteck übergibst, dann malt er sich komplett neu und wenn sich das Panel neu gezeichnet hat, stösst er danach die auf ihm liegenden Elemente an. Also entweder beschränkt du das neuzeichnen auf einen bestimmten Bereich (der der sich wirklich geändert hat) oder du hast keine Chance eine Verbesserung zu erzielen.
  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:34 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