AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TCheckListBox.items.checked[n] alle auf einmal setzen?
Thema durchsuchen
Ansicht
Themen-Optionen

TCheckListBox.items.checked[n] alle auf einmal setzen?

Ein Thema von alleinherrscher · begonnen am 11. Apr 2018 · letzter Beitrag vom 11. Apr 2018
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

AW: TCheckListBox.items.checked[n] alle auf einmal setzen?

  Alt 11. Apr 2018, 13:32
Da nimm CheckListBox.Checked[n] := CheckedMask[n];
Dein Aufruf über items[].checked löst ein Neuzeichnen aus, bin ich fast fest von überzeugt.
Sorry, das war nur ein Tippfehler, items[].checked gibt es gar nicht, verwende natürlich CheckListBox.Checked. Wird meiner Meinung nach trotzdem neugezeichnet. Ich bin einen Schritt weiter. Das Parent der CheckListBox hat die Eigenschaft Doublebuffered auf true gesetzt. Entfernt man diese Option, wird das Verhalten der CheckListBox deutlich schneller. s. Anhang mit langsamer Version.

Das ist so schon mal besser, ich könnte mir aber vorstellen, dass es bei Fällen mit mehr als 150 Einträgen immer noch ein ähnliches Problem geben könnte. Aber vermutlich gibts hier keine bessere Möglichkeit, als alle Checkboxen einzeln zu setzen.

Zitat von Uwe Raabe:
Das Neuzeichnen wird in TCheckListBox.SetChecked ausgelöst.

Oder reden wir hier nicht über VCL?
TCheckListBox.SetChecked kennt mein Delphi XE2 (noch) nicht? Wir reden über VCL.
Angehängte Dateien
Dateityp: zip Project2.zip (3,2 KB, 3x aufgerufen)
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher (11. Apr 2018 um 13:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#2

AW: TCheckListBox.items.checked[n] alle auf einmal setzen?

  Alt 11. Apr 2018, 13:41
ich könnte mir aber vorstellen, dass es bei Fällen mit mehr als 150 Einträgen immer noch ein ähnliches Problem geben könnte.
Das ist nicht unbedingt so. Vor dem UpdateWindow wird ja gezielt der Bereich der CheckBox per InvalidateRect für das Neuzeichnen angemeldet. Das Ändern nicht-sichtbarer Einträge sollten dabei auch kein Neuzeichnen auslösen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

AW: TCheckListBox.items.checked[n] alle auf einmal setzen?

  Alt 11. Apr 2018, 14:22
Das ist nicht unbedingt so. Vor dem UpdateWindow wird ja gezielt der Bereich der CheckBox per InvalidateRect für das Neuzeichnen angemeldet. Das Ändern nicht-sichtbarer Einträge sollten dabei auch kein Neuzeichnen auslösen.
Okay, das wusste ich nicht, dann sollte es ja kein Problem geben, wenn die CheckListbox nicht zu groß ist und man viele Einträge hat. Danke schön! Ich glaube das, zusammem mit dem fehlerhaften doublebuffered löst mein Problem hinreichend!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  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 03:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz