Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mostar el Hint en un TEdit al presionar el Tabulador (https://www.clubdelphi.com/foros/showthread.php?t=49873)

Puberta 01-11-2007 20:39:50

Mostar el Hint en un TEdit al presionar el Tabulador
 
Hola, ojala alguien me pueda ayudar.

Tengo el siguiente problema, tengo un TRadioButton y lo sigue un
TEdit, el cual tiene un Hint ('Doble clic -> Ayuda'), pero el hint solo es visible cuando se para el Mouse sobre el y no cuando presiono la tecla Tabulador al TRadioButton anterior para pasar el Foco a el TEdit...es posible hacer esto, bueno dicen que en programación todo es posible, pero mi pregunta es ¿cómo?:confused:.

jhonny 01-11-2007 21:38:56

Según el truco 135 de Trucomania (Quizá haya algo mejor), necesitas dos metodos basicos y un atributo global para la unidad:

Código Delphi [-]
  private
    mango:THintWindow;
    function RevealHint(Control: TControl): THintWindow;
    procedure RemoveHint(var Hint: THintWindow);


Código Delphi [-]
function TForm1.RevealHint (Control: TControl): THintWindow;
var
   ShortHint: string;
   AShortHint: array[0..255] of Char;
   HintPos: TPoint;
   HintBox: TRect;
begin
   { Create the window: }
   Result := THintWindow.Create(Control);

   { Get first half of hint up to '|': }
   ShortHint := GetShortHint(Control.Hint);

   { Calculate Hint Window position & size: }
   HintPos := Control.ClientOrigin;
   Inc(HintPos.Y, Control.Height + 6);
   HintBox := Bounds(0, 0, Screen.Width, 0);
   DrawText(Result.Canvas.Handle,
       StrPCopy(AShortHint, ShortHint), -1, HintBox,
       DT_CALCRECT or DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
   OffsetRect(HintBox, HintPos.X, HintPos.Y);
   Inc(HintBox.Right, 6);
   Inc(HintBox.Bottom, 2);

   { Now show the window: }
   Result.ActivateHint(HintBox, ShortHint);
end; {RevealHint}

Código Delphi [-]
procedure TForm1.RemoveHint (var Hint: THintWindow);
begin
   Hint.ReleaseHandle;
   Hint.Free;
   Hint := nil;
end;

Para llamarlos podrias hacerlo por ejemplo en el OnEnter del Edit:

Código Delphi [-]
procedure TForm1.Edit1Enter(Sender: TObject);
begin
   mango := RevealHint(Edit1);
end;

Y en el OnExit para hacerlo desaparecer:

Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  RemoveHint(mango);
end;

Y Listo ;), espero te sirva el truco 135 de TrucoMania :).

Puberta 01-11-2007 22:51:20

Hola Jhonny,

Te agradezco tu ayuda y tiempo, en verdad funcionó de maravilla, llevaba ya un día intentando varias formas de hacerlo pero no me quedaba, no sabes lo agradecida que estoy, aunque aún no lo entiendo del todo (pero lo haré tarde o temprano, ojala que sea temprano).

Alcolea 21-11-2007 22:16:50

Una sugerencia
 
Buscando hacer eso que dices encontre a Alcione, es un conjunto de componente que bajé hace ya algún tiempo, uno de ellos se nombre AllHintBallon o algo parecido que es capaz de ponerte el Hint que quieres sobre cualquier componente con tan solo pasar unos parámetros, como con se usa Application.MessageBox(). Este Hint tiene la misma forma que el balón de Windows con icono de Error, Warning e Information y todo. Si te animas a buscarlo se que no te pesará.

jhonny 21-11-2007 22:28:37

Pues a mi me funciona bien, creo que debes hacer una mejora al llamar el metodo remove, asi:

Código Delphi [-]
  if mango <> nil then
    RemoveHint(mango);

Para que nos aseguremos que la variable mango siempre tenga algo al momento de llamar el metodo RemoveHint ;).

Al llamar el RevealHint deberia tener otra mejora, asi:

Código Delphi [-]
  if mango = nil then
    mango := RevealHint(Edit1);

Puberta 22-11-2007 00:04:56

Primero opte por la solución de Jhonny pués ya lo tenia casi todo, solo era cuestión de agregar 2 lineas más.

Jhonny, solo me queda agradecerte de nuevo pues es como indicaste.

Gracias Alcolea, la verdad aún no he probado la solución que mencionas, pero lo haré y después les cuento como me fue.

jhonny 22-11-2007 00:06:54

Cita:

Empezado por Puberta (Mensaje 247602)
Primero opte por la solución de Jhonny pués ya lo tenia casi todo, solo era cuestión de agregar 2 lineas más.

Jhonny, solo me queda agradecerte de nuevo pues es como indicaste.

Gracias Alcolea, la verdad aún no he probado la solución que mencionas, pero lo haré y después les cuento como me fue.

Que bueno que a quedado bien el asunto :).


La franja horaria es GMT +2. Ahora son las 11:08:31.

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