Announcement

Collapse
No announcement yet.

Attribute in TSearchRec auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Attribute in TSearchRec auslesen

    Hallo,<p> kann mir jemand erklären, wie ich Mehrfach-Attribute in TSearchRec auslese? Ich habe schon mal versucht<pre>
    if SearchRec.Attr AND faHidden > 0 then AttrStr:='H';
    if SearchRec.Attr AND faReadOnly > 0 then AttrStr:='R';
    if SearchRec.Attr AND faSysFile > 0 then AttrStr:='S';
    if SearchRec.Attr AND faArchive > 0 then AttrStr:='A';
    if SearchRec.Attr AND faHidden AND faReadOnly > 0 then AttrStr:='HR';
    if SearchRec.Attr AND faHidden AND faReadOnly AND faSysFile > 0 then AttrStr:='HRS';
    if SearchRec.Attr AND faHidden AND faReadOnly AND faSysFile AND faArchive> 0 then AttrStr:='HRSA';
    </pre>
    aber das liefert falsche Ergebnisse. Welche Logik steckt hinter dem AND und dem OR?<br>
    Danke im voraus.

  • #2
    if ((SearchRec.Attr AND faHidden) = faHidden) then AttrStr:= 'H'

    Comment


    • #3
      <pre>

      begin
      AttrStr := '......'; // 6 Zeichen
      if SR.Attr and faReadOnly <> 0 then AttrStr[1] := 'R';
      if SR.Attr and faSysFile <> 0 then AttrStr[2] := 'S';
      if SR.Attr and faHidden <> 0 then AttrStr[3] := 'H';
      if SR.Attr and faArchive <> 0 then AttrStr[4] := 'A';
      if SR.Attr and faDirectory <> 0 then AttrStr[5] := 'D';
      if SR.Attr and faVolumeID <> 0 then AttrStr[1] := 'V';
      end;

      </pre>

      In jeder faXXXX Konstnate ist nur ein Bit gesetzt, z.B. $0001, $0002, $0004 usw. D.h. die faXXXX Konstanten sind immer ein Power of 2.
      Der AND Operator führt nun eine Binäre UND Verknüpfung durch, also das Resultat kann nur <> 0 sein falls in beiden Operanden an der gleichen Stelle ein Bit auf 1 steht. Da die faXXXX Konstanten nur jeweils 1 Bit gesetzt haben kann das Resultat entweder 0 oder faXXXX sein = <> 0. Nun, ich nehme absichlich die Abfrage <> 0 statt Attr and faXXXX = faXXX da der Complier dann effizienteren Code generiert. Eine Abfrage ob = 0 oder <> 0 ist immer schneller als eine Abfrage wie X = Y oder X = 123 usw.

      Nochmals zum AND = UND. Stelle die einen Flur vor, eine Lampe, zwei Schalter. Nun, UND heist die Lampe leuchtet nur wenn beide Schalter auf ON sind. Sobald ein Schalter auf OFF ist fließt kein Strom mehr = Lampe ist aus. Beider Schalter sind also in Reihe geschaltet.

      OR = ODER. Beide Schalter sind parallel geschaltet, d.h. ein Schalter kann den anderen überbrücken. Das führt dazu das die lampe leuchtet wenn entweder nur Schalter A oder nur Schalter B oder Schalter A und B auf ON sind. Nur wenn beide Schalter auf OFF sind leuchtet die Lampe nicht.

      NOT = NICHT, Der Flur hat nur einen Schalter, wenn der Schlater OFF ist leuchtet Lampe wenn Schalter ON ist ist Lampe aus. D.h. NOT kehrt den Status einfach um, bzw. aus 0 wird 1 und 1 wird 0.

      XOR = Exklusives ODER. Lampe leuchtet falls nur Schalter A = ON oder Schalter B = ON, Lampe ist aus falls Schalter A und B ON oder Schalter A und B OFF.

      All diese Operatoren sind Grundbestandteil = Rechnenoperationen der <b>boolschen Algebra</b> eigentlich Lehrstoff 5. Klasse Mathe

      Gruß Hage

      Comment


      • #4
        Hallo Hagen,<p>besten Dank für die Nachhilfe. Ich glaube, jetzt habe ich es begriffen. Mein Matheunterricht in der 5. Klasse war sauschlecht...;-

        Comment

        Working...
        X