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 KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

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

  Alt 11. Apr 2018, 13:19
CheckListBox.items[n].checked:=CheckedMask[n];
Da nimm CheckListBox.Checked[n] := CheckedMask[n];
Dein Aufruf über items[].checked löst ein Neuzeichnen aus, bin ich fast fest von überzeugt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.877 Beiträge
 
Delphi 13 Florence
 
#2

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

  Alt 11. Apr 2018, 13:25
Dein Aufruf über items[].checked löst ein Neuzeichnen aus, bin ich fast fest von überzeugt.
Es gibt gar kein CheckListBox.Items.Checked, da Items vom Typ TStrings ist. Das Neuzeichnen wird in TCheckListBox.SetChecked ausgelöst.

Oder reden wir hier nicht über VCL?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 11. Apr 2018, 13:43
[Edit]Quarks[/Edit]
Ich habe mal in dein Projekt geschaut, eine schnellere Variante kenne ich auch nicht.
Wenn es Dir um Zeitersparniss in vielen CheckListBoxen geht, würd ich für jede eine CheckListBox nutzen, somit entfällt der Zeitraubende Faktor beim neu befüllen.
Ich hatte Anfangs gedacht das CheckListBoxen pro Tab die gleichen sind, nur halt anders markiert/gecheckt werden sollen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (11. Apr 2018 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

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

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.877 Beiträge
 
Delphi 13 Florence
 
#5

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
 
#6

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 16:01 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