Ich finde, es wird klarer, wenn man auch den Button-Parameter mit anzeigt.
"Button" ist der Button, der seinen Zustand
ändert, "Shift" enthält die (Sonder- und Maus-)Tasten, die gedrückt
sind.
Wenn keine andere Maustaste gedrückt ist, wird beim Loslassen der gedrückten linken Maustaste "Button" zu "mbLeft", und "Shift" ist leer, weil beim Loslassen keine andere Taste mehr gedrückt ist.
Sind die linke und die rechte Maustaste gedrückt und die linke wird losgelassen ist "Button" = "mbLeft", und "Shift" enthält "ssRight", weil die rechte
noch gedrückt ist.
Code: Alles auswählen
uses
TypInfo;
{ TForm1 }
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Memo1.Lines.Add(Format('MOUSE UP: Button = %s, Shift = %s)', [
GetEnumName(TypeInfo(TMouseButton), Integer(Button)),
SetToString(PTypeInfo(TypeInfo(TShiftState)), Integer(Shift), true)
]));
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Memo1.Lines.Add(Format('MOUSE DOWN: Button = %s, Shift = %s)', [
GetEnumName(TypeInfo(TMouseButton), Integer(Button)),
SetToString(PTypeInfo(TypeInfo(TShiftState)), Integer(Shift), true)
]));
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Memo1.Lines.Add(Format('MOUSE MOVE: Shift = %s)', [
SetToString(PTypeInfo(TypeInfo(TShiftState)), Integer(Shift), true)
]));
end;
OnMouseMove enthält keinen Parameter "Button", weil kein Button seinen Zustand ändert.