lazarus/lcl/include/radiobutton.inc

128 lines
3.5 KiB
PHP

{%MainUnit ../stdctrls.pp}
{******************************************************************************
TRadioButton
******************************************************************************
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
current design flaws:
- derived from TCustomCheckBox instead of TButtonControl
Delphi compatibility:
- derived from TCustomCheckBox instead of TButtonControl
- alignment property is missing
- lots of unknown issues
TODO:
- check for Delphi compatibility
* Who's responsible for the fGroup - pointer and who'll free the
memory allocated for it?????? - automatically managed by GTK+ when
destroying widget, no worry (MB)
* make serious tests
- GTK interface : handle reparenting
Bugs:
- s.a. TCustomCheckbox
}
{------------------------------------------------------------------------------
Method: TRadioButton.Create
Params: aOwner : owner of this object
Returns: Nothing
Create a new TRadioButton
------------------------------------------------------------------------------}
constructor TRadioButton.Create(TheOwner : TComponent);
begin
inherited Create(TheOwner);
fCompStyle := csRadioButton;
AutoSize := True;
end;
{------------------------------------------------------------------------------
Method: TRadioButton.RealSetText
Params: Value: TCaption
Returns: nothing
Change the caption, and then recreate to update, then call to AutoSize
------------------------------------------------------------------------------}
procedure TRadioButton.RealSetText(const Value: TCaption);
begin
if Text = Value then
Exit;
inherited RealSetText(Value);
InvalidatePreferredSize;
AdjustSize;
end;
procedure TRadioButton.DoClickOnChange;
begin
TabStop := FState = cbChecked;
//inherited calls DoOnChange
if FState = cbChecked then
inherited DoClickOnChange
else
DoOnChange;
end;
procedure TRadioButton.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
// BS_AUTORADIOBUTTON may hang the application,
// if the radiobuttons are not consecutive controls.
Params.Style := (Params.Style and not BS_3STATE) or BS_RADIOBUTTON;
end;
class procedure TRadioButton.WSRegisterClass;
begin
inherited WSRegisterClass;
RegisterRadioButton;
end;
procedure TRadioButton.ApplyChanges;
var
Sibling: TControl;
i: Integer;
begin
inherited ApplyChanges;
//the siblings are unchecked by the widgetset. When the handle is not allocated,
//the widgetset is not notified so it cannot update the siblings
if not HandleAllocated and (FState = cbChecked) and
(Parent <> nil) and (not (csLoading in ComponentState)) then
begin
for i := 0 to Parent.ControlCount - 1 do
begin
Sibling := Parent.Controls[i];
if (Sibling is TRadioButton) and (Sibling <> Self) then
TRadioButton(Sibling).Checked := False;
end;
end;
end;
function TRadioButton.DialogChar(var Message: TLMKey): boolean;
begin
if IsAccel(Message.CharCode, Caption) and CanFocus then
begin
SetFocus;
if Focused then
Checked := True;
Result := True;
end else
Result := inherited;
end;
// included by stdctrls.pp