That gave me this idea. Chalk it up as another weird code snippet from yours truly.
///<summary>> Convert array of booleans to a pseudobinary integer. ///Good for up to 12 bits.</summary> function BoolToInt(B: Array of Boolean):Integer; var x : Boolean; begin Result := 0; for x in B do begin Result := Result * 10; if x then Inc(Result); end; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ch : Char; begin ch := Lowercase(Char(Key)); case BoolToInt([ssShift in Shift, ssCtrl in Shift, ch='a', ch='x', ch='c', ch='v']) of 011000: SelectAll; 010100: Cut; 010010: Copy; 110010: Clone; 010001: Paste; end; end;
A slightly more tongue in cheek example:
procedure SexistTestLogic(const Cute, Funny, Smart: boolean); begin case BoolToInt([Cute, Funny, Smart]) of 000: Avoid; 001: Admire; 010, 011: Befriend; 100: Tolerate; 101: HandleWithCare; 110: Adore; 111: Marry; end; end;
procedure WifeTestLogic(const Washing, Ironing, Food, Entertainment: boolean);
ReplyDeletebegin
//...
end;