Hallo,
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).
Na, dann geben wir dem Wunschkind doch einen Namen:
Delphi-Quellcode:
type
TSx_ShiftKey = (skShift, skAlt, skCtrl);
TSx_ShiftKeys = set of TSx_ShiftKey;
TSomeShiftKey = ssShift..ssCtrl;
TSomeShiftKeys = set of TSomeShiftKey;
function Sx_ShiftKeysToShiftState (const V: TSx_ShiftKeys): TShiftState;
const
Map: array [TSx_ShiftKey] of TSomeShiftKey = (ssShift, ssAlt, ssCtrl);
var
sk: TSx_ShiftKey;
begin
Result := [];
for sk in V do
Include (Result, Map[sk]);
end;
procedure SetZoomShift(const V: TSx_ShiftKeys);
var
fZoomShift: TShiftState;
begin
fZoomShift := Sx_ShiftKeysToShiftState(V);
Include(fZoomShift, ssLeft);
end;
Wenn du
TSomeShiftKeys schon bei der Definition der Eigenschaft verwendest anstatt neue Bezeichner für die Werte des (eingeschränkten) Aufzählungstypen einzuführen, könnte die Routine
SetZoomShift so aussehen:
Delphi-Quellcode:
procedure SetZoomShift (const V: TSomeShiftKeys);
var
fZoomShift: TShiftState;
begin
fZoomShift := V + [ssLeft];
end;
Gruß Hawkeye