Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht (https://www.delphipraxis.net/115421-8-bits-zu-checkboxen-zuweisen-ansatz-gesucht.html)

Netblaster 11. Jun 2008 21:41


8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Hallo Allerseits,

ich stehe gerade bei einem logischen Problem etwas auf dem Schlauch.
Folgendes:
Ich lese einen µC aus und bekomme ein Byte zurück.(Also 8 Bit ;-)

Jedes Bit stellt einen Kontakt dar. (Also 8 Kontakte)
Für jeden Kontakt habe ich eine CheckBox, die anzeigen soll, welcher Kontakt gerade geschlossen ist.

Wie könnten am elegantesten die CheckBoxen gesetzt werden.
Also die blödeste Lösung wären 256 If-Abfragen. (undenkbar)

Kann mich mal jemand "anstoßen" ?? :gruebel:

Danke - Andrej!

DeddyH 11. Jun 2008 21:43

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Vielleicht hilft Dir dies ja auf die Sprünge.

Netblaster 11. Jun 2008 21:55

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Ja Danke erstmal,

das ich die einzelnen Bits auswerten muss ist schon klar.
Ich sags mal einfach: Also soll ich die jeweiligen 8 Stellen des Bytes seperieren und dann hätte ich nur noch 8 Abfragen...? (Also 8 mal testen ob 1 oder 0 und dann die jeweilige CheckBox setzen)

DeddyH 11. Jun 2008 21:55

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Mit etwas Geschick könnte man das ja auch in eine Schleife packen.

bluesbear 11. Jun 2008 22:07

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Ich weiß auch nicht, wo es grad hängt, aber ich werfe mal "and" und "shl" als Suchbegriffe für F1 dazu. Eine etwas genauere Frage wäre hilfreich.

Luckie 11. Jun 2008 22:24

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Eine nicht mathematische Lösung: Wandele das Byte in seine binäre Schreibweise als Zeichenkette um. Dann bekommst du zum Beispiel: "10110101". Dann gehst du die Zeichenkette in einer Schleife durch und prüfst wo eine eins steht:
Delphi-Quellcode:
if s[1] = '1' then CheckBox1.Checked := True;

Thomas Horstmann 11. Jun 2008 22:28

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Hallo,

evtl. hilft diese Funktion weiter. "iValue" entspricht z.B. der Byte-Variable.
Und "iBit" legt das zu prüfende Bit fest (beginnend von rechts, wobei 0 dem ersten Bit enspricht).

"FloatToStr" bzw. "StrToInt" werden benutzt, weil "IntPower" Extended zurückgibt. Dies schien mir
der einfachste weg zu sein, um wieder auf Integer zu kommen. Deshalb auch zur Sicherheit
try/except. Gibt sicherlich elegantere Wege, aber läuft.

Viele Grüße
Tom

Delphi-Quellcode:
function CheckBit
( iValue : Integer ;
  iBit  : Integer ) : Boolean ;
var
iString  : String ;
iBitValue : Integer ;
begin
{ Variablen }
iString := FloatToStr(IntPower(2,iBit)) ;
  try
  iBitValue := StrToInt(iString) ;
  except
  iBitValue := 0 ;
  end ; // try
{ Prüfen und Rückgabe }
result := (iBitValue and iValue = iBitValue) ;
end ;

Netblaster 11. Jun 2008 22:45

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Vielen Dank Euch allen,

was ich mir nun gebaut habe:
Delphi-Quellcode:
var
Kontakte,z,z1 : byte;
DasEmpfangeneByte : string;

Begin
Kontakte:=ord(DasEmpfangeneByte); //Das empfangene Byte ist aus der Schnittstelle als String eingelesen
                              // und wird erst mal umgewandelt...spielt hier aber erst mal keine Rolle...

z1:=1;

for z:=1 to 8 do begin bit[z]:=Kontakte and z1; z1:=z1*2; end;

if bit[1] <> 0 then Hauptform.SeSkinCheckBox1.checked:=true;
if bit[2] <> 0 then Hauptform.SeSkinCheckBox2.checked:=true;
if bit[3] <> 0 then Hauptform.SeSkinCheckBox3.checked:=true;
if bit[4] <> 0 then Hauptform.SeSkinCheckBox4.checked:=true;
if bit[5] <> 0 then Hauptform.SeSkinCheckBox5.checked:=true;
if bit[6] <> 0 then Hauptform.SeSkinCheckBox6.checked:=true;
if bit[7] <> 0 then Hauptform.SeSkinCheckBox7.checked:=true;
if bit[8] <> 0 then Hauptform.SeSkinCheckBox8.checked:=true;

end
Also so geht es erst mal.
Ist ebend blöd, dass man die 8 CheckBoxen nicht mit einem Befehl gleichzeitig, sozusagen in dem man die BitMaske drüberlegt, aktivieren kann.

Aber Ihr habt mir erst mal erfolgreich weitergeholfen. - Danke!

Dax 11. Jun 2008 22:51

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Wie wärs damit?
Delphi-Quellcode:
for z := 0 to 7 do
  TCheckBox(Hauptform.FindComponent('SeSkinCheckBox' + IntToStr(z+1))).Checked := ((bit shr z) and 1) <> 0;

Netblaster 11. Jun 2008 23:08

Re: 8 Bits zu CheckBoxen zuweisen - Ansatz gesucht
 
Hey Dax,

das sieht ja sehr vielversprechend aus :thumb:

Werde ich morgen mal austesten - was es so alles für Dinge in Delphi gibt !

(Komme leider viel zu wenig zum Delphicodern - aber was solls - viele Wege führen nach Rom - einige sind nur etwas steiniger :mrgreen: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.
Seite 1 von 2  1 2      

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