lazarus/lcl/include/radiobutton.inc
2010-05-17 01:10:18 +00:00

141 lines
4.0 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 copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
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;
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.ApplyChanges;
begin
inherited ApplyChanges;
DoApplyChanges;
end;
procedure TRadioButton.SetChecked(Value: Boolean);
begin
inherited SetChecked(Value);
TabStop := Value;
end;
procedure TRadioButton.DoChange(var Msg);
begin
inherited DoChange(Msg);
DoApplyChanges;
end;
procedure TRadioButton.DoApplyChanges;
var
i: Integer;
Sibling: TControl;
begin
if not (csLoading in ComponentState) and (Parent <> nil) and (FState = cbChecked) 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;
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.Click;
begin
Checked := True;
inherited Click;
end;
function TRadioButton.DialogChar(var Message: TLMKey): boolean;
begin
if IsAccel(Message.CharCode, Caption) and CanFocus then
begin
SetFocus;
Result := True;
end else
Result := inherited;
end;
// included by stdctrls.pp