Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Neuzeichnen eines Steuerelements verhindern (https://www.delphipraxis.net/153336-neuzeichnen-eines-steuerelements-verhindern.html)

MatthiasR 29. Jul 2010 14:09

Delphi-Version: 2005

Neuzeichnen eines Steuerelements verhindern
 
Folgende Frage: kann man temporär das Neuzeichnen eines Controls unterbinden? Konkret geht es um ein StringGrid, das auf einem Formular liegt. Während der Gridinhalt überarbeitet wird (es werden alle Zeilen analysiert und überflüssige gelöscht), soll das Steuerelement nicht ständig neu gezeichnet werden, sondern erst, nachdem die Überarbeitung vollständig abgeschlossen wurde.

Wie geht das? Gibt es da Methoden a la "DisableRepaint" und "EnableRepaint" oder so ähnlich?

mkinzler 29. Jul 2010 14:11

AW: Neuzeichnen eines Steuerelements verhindern
 
BeginUpdate/EndUpdate

MatthiasR 29. Jul 2010 14:18

AW: Neuzeichnen eines Steuerelements verhindern
 
Zitat:

Zitat von mkinzler (Beitrag 1038380)
BeginUpdate/EndUpdate

In welcher Klasse sind die Methoden definiert?

Namenloser 29. Jul 2010 14:24

AW: Neuzeichnen eines Steuerelements verhindern
 
Bei Google suchenTStringGrid BeginUpdate führt zu diesem Thread im Embarcadero-Forum.

mkinzler 29. Jul 2010 14:28

AW: Neuzeichnen eines Steuerelements verhindern
 
In der StringList-Klasse
Je nach dem was du einfügst also für die Cols oder Rows setzen:

Delphi-Quellcode:
function LockGrid( Grid: TStringGrid);
var
    i: Integer;
begin
    for i := 0 to Grid.ColCount -1 do
    begin
        Grid.Cols[i].BeginUpdate;
    end;
end;

function UnLockGrid( Grid: TStringGrid);
var
    i: Integer;
begin
    for i := 0 to Grid.ColCount -1 do
    begin
        Grid.Cols[i].EndUpdate;
    end;
end;

MatthiasR 29. Jul 2010 14:31

AW: Neuzeichnen eines Steuerelements verhindern
 
Zitat:

Zitat von NamenLozer (Beitrag 1038385)
Bei Google suchenTStringGrid BeginUpdate führt zu diesem Thread im Embarcadero-Forum.

Das StringGrid aus dem TMS-Komponentenpaket bietet die Methoden BeginUpdate und EndUpdate selbst bereits an, habe ich entdeckt. Intern wird eine Windows-Nachricht wie folgt verschickt:
Delphi-Quellcode:
SendMessage(Handle,WM_SETREDRAW,integer(False),0);
Mit diesem Aufruf sollte das ganze eigentlich für jedes Control unter D7 funktionieren, oder? Gleich mal ausprobieren. Ansonsten versuche ich es mit deinem Ansatz, vielen Dank!

EDIT: Jawollja, mittels Windows-Message WM_SETREDRAW erfolgreich an einem TMemo ausprobiert :)

shmia 29. Jul 2010 17:37

AW: Neuzeichnen eines Steuerelements verhindern
 
Da gibt es sogar eine schöne Procedure dazu: LockControl()

MatthiasR 30. Jul 2010 08:03

AW: Neuzeichnen eines Steuerelements verhindern
 
Super, danke! Werde ich so in unser Projekt übernehmen :thumb:


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