AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

integer bit werte in checkbox anzeigen

Ein Thema von michdan · begonnen am 12. Jun 2011 · letzter Beitrag vom 13. Jun 2011
Antwort Antwort
michdan

Registriert seit: 1. Okt 2003
Ort: varde, Dänemark
40 Beiträge
 
Delphi 7 Professional
 
#1

integer bit werte in checkbox anzeigen

  Alt 12. Jun 2011, 18:58
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:
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;
gruss
michael
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

AW: integer bit werte in checkbox anzeigen

  Alt 12. Jun 2011, 19:01
Hi,

schau mal nach Delphi-Referenz durchsuchenfindComponent.


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: integer bit werte in checkbox anzeigen

  Alt 12. Jun 2011, 19:24
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: integer bit werte in checkbox anzeigen

  Alt 12. Jun 2011, 19:55
Mach dich mal mit der Komponente TCheckListBox bekannt...
Das gilt dann auch für alle Mitleser, die dieses Steuerelement wohl noch nicht kennen.
  Mit Zitat antworten Zitat
michdan

Registriert seit: 1. Okt 2003
Ort: varde, Dänemark
40 Beiträge
 
Delphi 7 Professional
 
#5

AW: integer bit werte in checkbox anzeigen

  Alt 12. Jun 2011, 20:01
Vielen dank für inputs....

DeddyH dein vorslag war genau richtig und funktioniert....

nochmals danke..

/michael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: integer bit werte in checkbox anzeigen

  Alt 12. Jun 2011, 22:45
Ansonsten hättest du selbst bei den IFs 80% der Zeilen einsparen können.

Delphi-Quellcode:
CheckBox16.Checked := (Value and 32768) <> 0;
CheckBox15.Checked := (Value and 16384) <> 0;
CheckBox14.Checked := (Value and 8192) <> 0;
...
CheckBox1.Checked := (Value and 1) <> 0;
Und Hexadezimal läßt sich Binär auch viel schöner rechnen, als mit Dezimal.
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: integer bit werte in checkbox anzeigen

  Alt 13. Jun 2011, 02:08
Und Hexadezimal läßt sich Binär auch viel schöner rechnen, als mit Dezimal.
Völlig korrekt, aber ich musste irgendwie schmunzeln und an "Nachts ist es kälter als draußen" denken
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#8

AW: integer bit werte in checkbox anzeigen

  Alt 13. Jun 2011, 11:20
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;
Power is nothing without TControl

Geändert von hboy (13. Jun 2011 um 12:02 Uhr)
  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 06:29 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