Ich würde es wie folgt machen:
Delphi-Quellcode:
type
TSx_ShiftKey = (skShift, skAlt, skCtrl);
TSx_ShiftKeys = set of TSx_ShiftKey;
function Sx_ShiftKeysToShiftState(const V: TSx_ShiftKeys): TShiftState;
var
sk: TSx_ShiftKey;
begin
Result := [];
for sk in V do
begin
case sk of
skShift:
Include(Result, ssShift);
skAlt:
Include(Result, ssAlt);
skCtrl:
Include(Result, ssCtrl);
end;
end;
end;
procedure SetZoomShift(const V: TSx_ShiftKeys);
var
fZoomShift: TShiftState;
begin
fZoomShift := Sx_ShiftKeysToShiftState(V);
Include(fZoomShift, ssLeft);
end;
Noch schöner wäre statt des
case
ein konstantes Zuordnungsarray, aber da die
VCL-Schreiberlinge ungeschickterweise den Elementtyp von TShiftState (wie du den von TSx_ShiftKeys
) namenlos gelassen haben, geht das nicht (zumindest ohne Casterei).