Einzelnen Beitrag anzeigen

Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

brauche hilfe mit CMDialogChar

  Alt 2. Jan 2019, 12:01
habe mal wieder ein kleines problem, ich arbeite an einer Checkbox(CustomControl)
und ich komme an IsAccel in CMDialogChar nicht vorbei und ich weiß nicht woran es liegen kann.


wenn ich die funktion IsAccel() wechlasse funktioniert alles zumindest wenn ich den fokus mit der maus setze
Delphi-Quellcode:
procedure TjbAdvCheckBox.CMDialogChar(var Message: TCMDialogChar);
begin
 if Focused then
  SetChecked(not FChecked);
end;


die untere variable funktioniert nicht, und ich habe die selbe funktion bei der TMS Instrumentation Workshop und VrBitmapCheckBox getestet mit dem selben ergebnis.
während bei der standard TCheckBox oder TRzCheckBox alles korrekt funktioniert.

Delphi-Quellcode:
procedure TjbAdvCheckBox.MouseDown(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
begin
  if Button <> mbLeft then
   exit
  else
   begin
    if not Enabled then
     exit;

     SetFocus;
     FFocus := True;

    if (Button = mbLeft) and PtInRect(FBoxRec, Point(X, Y)) then
     begin
      FMouseState:= msMouseDown;
     end;
   end;

 Invalidate;
end;


procedure TjbAdvCheckBox.MouseUp(Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
begin
 if (Button = mbLeft) and PtInRect(FBoxRec, Point(X, Y)) then
  begin
   SetChecked(not FChecked);
   FMouseState := msMouseUp;
  end;
end;

procedure TjbAdvCheckBox.MouseMove(Shift : TShiftState; X, Y : Integer);
begin
  if PtInRect(FBoxRec, Point(X, Y)) then
   begin
    FMouseMoving:= True;
    FMousePos:= mpMouseIn;
    Invalidate;
   end
  else
   begin
    FMouseMoving:= False;
    FMousePos:= mpMouseOut;
    Invalidate;
   end;
end;

//
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;

procedure TjbAdvCheckBox.CMDialogChar(var Message: TCMDialogChar);
begin
  with Message do
  if IsAccel(CharCode, Caption) then
    begin
      SetFocus;
     if Focused then
      SetChecked(not FChecked);
      Result := 1;
    end
  else
   inherited;
end;
Miniaturansicht angehängter Grafiken
checkbox.jpg  
  Mit Zitat antworten Zitat