Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

AW: SETs unterschiedlicher Grösse kombinieren

  Alt 13. Aug 2010, 19:02
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
  Mit Zitat antworten Zitat