![]() |
integer bit werte in checkbox anzeigen
hallo
Ich habe eine form mit 16 checkboxen und ein TEdit felt. Die 16 checkboxen repräsentieren die einzellenen bits im wert. Wie kann ich am besten die einzellen bits (Checkbox.checked) setzen wenn ich einen wert in das TEdit schreibe ? Jetzt mache ich das so, aber kann man nicht den namem der checkbox rausfinden und in einer schleife einbauen?
Delphi-Quellcode:
gruss
procedure TForm2.Button1Click(Sender: TObject);
var value : word; begin value := strtoint(edit2.Text); if (Value and 32768 ) = 0 then checkbox16.Checked := false else checkbox16.Checked := true; if (Value and 16384 ) = 0 then checkbox15.Checked := false else checkbox15.Checked := true; if (Value and 8192 ) = 0 then checkbox14.Checked := false else checkbox14.Checked := true; if (Value and 4096 ) = 0 then checkbox13.Checked := false else checkbox13.Checked := true; if (Value and 2048 ) = 0 then checkbox12.Checked := false else checkbox12.Checked := true; if (Value and 1024 ) = 0 then checkbox11.Checked := false else checkbox11.Checked := true; if (Value and 512 ) = 0 then checkbox10.Checked := false else checkbox10.Checked := true; if (Value and 256 ) = 0 then checkbox9.Checked := false else checkbox9.Checked := true; if (Value and 128 ) = 0 then checkbox8.Checked := false else checkbox8.Checked := true; if (Value and 64 ) = 0 then checkbox7.Checked := false else checkbox7.Checked := true; if (Value and 32 ) = 0 then checkbox6.Checked := false else checkbox6.Checked := true; if (Value and 16 ) = 0 then checkbox5.Checked := false else checkbox5.Checked := true; if (Value and 8 ) = 0 then checkbox4.Checked := false else checkbox4.Checked := true; if (Value and 4 ) = 0 then checkbox3.Checked := false else checkbox3.Checked := true; if (Value and 2 ) = 0 then checkbox2.Checked := false else checkbox2.Checked := true; if (Value and 1 ) = 0 then checkbox1.Checked := false else checkbox1.Checked := true; edit2.SelStart := length(edit2.Text); end; michael |
AW: integer bit werte in checkbox anzeigen
|
AW: integer bit werte in checkbox anzeigen
Aus dem Kopf, daher ohne Gewähr:
Delphi-Quellcode:
for i := 15 downto 0 do
TCheckBox(FindComponent('CheckBox' + IntToStr(i + 1))).Checked := (Value and (1 shl i)) <> 0; |
AW: integer bit werte in checkbox anzeigen
Mach dich mal mit der Komponente TCheckListBox bekannt...
Das gilt dann auch für alle Mitleser, die dieses Steuerelement wohl noch nicht kennen. |
AW: integer bit werte in checkbox anzeigen
Vielen dank für inputs....
DeddyH dein vorslag war genau richtig und funktioniert.... nochmals danke.. /michael |
AW: integer bit werte in checkbox anzeigen
Ansonsten hättest du selbst bei den IFs 80% der Zeilen einsparen können.
Delphi-Quellcode:
Und Hexadezimal läßt sich Binär auch viel schöner rechnen, als mit Dezimal.
CheckBox16.Checked := (Value and 32768) <> 0;
CheckBox15.Checked := (Value and 16384) <> 0; CheckBox14.Checked := (Value and 8192) <> 0; ... CheckBox1.Checked := (Value and 1) <> 0;
Delphi-Quellcode:
CheckBox16.Checked := (Value and $8000) <> 0;
CheckBox15.Checked := (Value and $4000) <> 0; CheckBox14.Checked := (Value and $2000) <> 0; ... CheckBox1.Checked := (Value and $0001) <> 0; |
AW: integer bit werte in checkbox anzeigen
Zitat:
|
AW: integer bit werte in checkbox anzeigen
Delphi-Quellcode:
// folgendes kann man zur design time festlegen:
// Checkbox1.Tag := 1 shl 1; Checkbox2.Tag := 1 shl 2; //... Checkbox15.Tag := 1 shl 15; Checkbox16.Tag := 1 shl 16; // Checkbox-Objekte sind etwa in einem Panel oder einer Groupbox // ... // und das hier funktioniert für eine beliebige Anzahl von Elementen mit leicht // änderbaren Flags, dazu noch Kombinationen von Flags. var idx: longint; tray : TWinControl; cb : TCheckBox; begin tray := (Checkbox1.Parent as TWinControl); for idx := 0 to tray.ControlCount - 1 do begin if (tray.Controls[idx] is TCheckbox) then begin cb := (tray.Controls[idx] as TCheckbox); cb.Checked := (cb.Tag AND Value) <> 0; end; end; end; ps. alternativ zur Initialisierung (automatisches tagging):
Delphi-Quellcode:
uses math;
//... var cb : TCheckBox; i : longint; //... for i := 1 to 16 do begin cb := TCheckBox(FindComponent('CheckBox' + IntToStr(i))); if assigned(cb) then cb.Tag := power(2,i-1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz