Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo cambiar fuente predeterminada de componente TBalloonHint? (https://www.clubdelphi.com/foros/showthread.php?t=90915)

geolife 07-10-2016 18:34:33

¿Cómo cambiar fuente predeterminada de componente TBalloonHint?
 
Hola amig@s,

¿Hay alguna forma de cambiar la fuente que usa por defecto el componente TBalloonHint? He visto en el foro algún ejemplo para agregar/extender esta funcionalidad en class(THintWindow); la propiedad Hint por defecto; pero no consigo encontrar la manera de modificar la fuente en TBalloonHint; asociada a la propiedad CustomHint :confused:

Saludos,

Silvestre

dec 07-10-2016 18:48:40

Hola,

Seguramente no te sirva, pero, yo uso la siguiente unidad para manejar el "hint" de mis programas, y, en este caso sí que es posible cambiar el tamaño de la fuente, entre otras cosas.

Código Delphi [-]
unit ProgramHint;

interface

uses
  // Delphi
  Vcl.Controls,
  System.Classes,
  Winapi.Windows;

type
  TProgramHint = class(THintWindow)
  private
    procedure AppHint(var HintStr: string; var CanShow:
     Boolean; var HintInfo: Vcl.Controls.THintInfo);
  protected
    procedure Paint(); override;
  public
    function ShouldHideHint(): Boolean; override;
    procedure ActivateHint(Rect: TRect; const AHint: string); override;
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

uses
  // Delphi
  Vcl.Forms,
  System.Types;

{ TProgramHint }

constructor TProgramHint.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Canvas.Font.Size := 9;
  Canvas.Font.Name := 'Tahoma';
  Application.OnShowHint := Self.AppHint;
end;

procedure TProgramHint.Paint();
var
  R: TRect;
begin
  R := Rect(10, 10, ClientRect.Right, ClientRect.Bottom);
  DrawText(Canvas.handle, Caption, Length(Caption), R, DT_WORDBREAK);
end;

function TProgramHint.ShouldHideHint(): Boolean;
begin
  Result := True;
end;

procedure TProgramHint.AppHint(var HintStr: string;
 var CanShow: Boolean; var HintInfo: Vcl.Controls.THintInfo);
begin
  HintInfo.HintMaxWidth := 300;
  HintInfo.HideTimeout := 20 * 1000; // 30 seconds
end;

procedure TProgramHint.ActivateHint(Rect: TRect; const AHint: string);
begin
  if ProgramConfig.GUI.ShowHints then
  begin
    Inc(Rect.Bottom, 20);
    Inc(Rect.Right, 20);
    UpdateBoundsRect(Rect);
    inherited;
  end;
end;

initialization
  Application.ShowHint := False;
  HintWindowClass := TProgramHint;
  Application.ShowHint := True;

end.

Sé que no respondo a tu pregunta, pero, igual puede servir de algo aún así. :)

geolife 07-10-2016 19:13:41

Hola Dec,

Muchísimas gracias por tu aportación y ayuda!

Al final he conseguido poder extender esta funcionalidad también en el componente TBalloohint; así que lo comparto aquí con vosotros, junto con tu código.

Código Delphi [-]
// Extendemos la clase TCustomHintWindow
type
  TMyHintWindow=class(TCustomHintWindow)
  protected
    procedure Paint; override;
  end;


// Declaración procedimiento
procedure TMyHintWindow.Paint;
begin
  Canvas.Font.Name := 'STXihei';
  inherited;
end;

//Ya dentro del programa hacemos lo siguiente, pintamos el componente TBallooHint con nuestro TMyHintWindows:
BalloonHint1.PaintHint(TMyHintWindow.Create(Form1));



Cita:

Empezado por dec (Mensaje 509390)
Hola,

Seguramente no te sirva, pero, yo uso la siguiente unidad para manejar el "hint" de mis programas, y, en este caso sí que es posible cambiar el tamaño de la fuente, entre otras cosas.

Código Delphi [-]
unit ProgramHint;

interface

uses
  // Delphi
  Vcl.Controls,
  System.Classes,
  Winapi.Windows;

type
  TProgramHint = class(THintWindow)
  private
    procedure AppHint(var HintStr: string; var CanShow:
     Boolean; var HintInfo: Vcl.Controls.THintInfo);
  protected
    procedure Paint(); override;
  public
    function ShouldHideHint(): Boolean; override;
    procedure ActivateHint(Rect: TRect; const AHint: string); override;
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

uses
  // Delphi
  Vcl.Forms,
  System.Types;

{ TProgramHint }

constructor TProgramHint.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Canvas.Font.Size := 9;
  Canvas.Font.Name := 'Tahoma';
  Application.OnShowHint := Self.AppHint;
end;

procedure TProgramHint.Paint();
var
  R: TRect;
begin
  R := Rect(10, 10, ClientRect.Right, ClientRect.Bottom);
  DrawText(Canvas.handle, Caption, Length(Caption), R, DT_WORDBREAK);
end;

function TProgramHint.ShouldHideHint(): Boolean;
begin
  Result := True;
end;

procedure TProgramHint.AppHint(var HintStr: string;
 var CanShow: Boolean; var HintInfo: Vcl.Controls.THintInfo);
begin
  HintInfo.HintMaxWidth := 300;
  HintInfo.HideTimeout := 20 * 1000; // 30 seconds
end;

procedure TProgramHint.ActivateHint(Rect: TRect; const AHint: string);
begin
  if ProgramConfig.GUI.ShowHints then
  begin
    Inc(Rect.Bottom, 20);
    Inc(Rect.Right, 20);
    UpdateBoundsRect(Rect);
    inherited;
  end;
end;

initialization
  Application.ShowHint := False;
  HintWindowClass := TProgramHint;
  Application.ShowHint := True;

end.

Sé que no respondo a tu pregunta, pero, igual puede servir de algo aún así. :)


dec 07-10-2016 20:03:17

Hola,

Estupendo, hombre, gracias por compartir la respuesta. :)


La franja horaria es GMT +2. Ahora son las 04:57:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi