Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#2

AW: SETs unterschiedlicher Grösse kombinieren

  Alt 13. Aug 2010, 15:54
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).
Uli Gerhardt
  Mit Zitat antworten Zitat