anchor.diff:      FButton: TfpgButton;
       FOnButtonClick: TNotifyEvent;
       FRootDirectory: TfpgString;
  +    FReadOnly: Boolean;
       function GetDirectory: TfpgString;
       procedure btnClick(Sender: TObject);
       function GetExtraHint: TfpgString;
       procedure SetDirectory(const AValue: TfpgString);
       procedure SetExtraHint(const AValue: TfpgString);
  +    procedure SetReadOnly(const AValue: Boolean);
     protected
       procedure HandlePaint; override;
       procedure HandleResize(AWidth, AHeight: TfpgCoord); override;
  
positive.code:   FWidth          := 140;
    FHeight         := 24;
    FFilter         := '';
  
    FEdit := TfpgEdit.Create(self);
    with FEdit do
  
negative.code:   Result := FEdit.Text;
  end;
  
  procedure TfpgFileNameEdit.SetReadOnly(const AValue: Boolean);
  begin
    if FReadOnly = AValue then
      Exit;
    FReadOnly := AValue;
    FEdit.ReadOnly := FReadOnly;
    FButton.Enabled := not FReadOnly;   // Buttons don't have ReadOnly property.
  end;
  
  procedure TfpgFileNameEdit.HandlePaint;
  var
    img: TfpgImage;
  