Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Hint-Popup manuell anzeigen (https://www.delphipraxis.net/57566-hint-popup-manuell-anzeigen.html)

Puddi 23. Nov 2005 12:10


Hint-Popup manuell anzeigen
 
Ahoi!

Ich habe ein DBGrid, das bei Bewegung des Cursors über einen Datensatz den Inhalt einer bestimmten Zelle des aktiven Datensatzes im Hint-Popup anzeigt. Das klappt soweit problemlos.

Meine Frage dazu: Kann ich das Anzeigen des Popups auch auslösen, wenn ich beispielsweise mit den Cursortasten zum nächsten Datensatz springe, also ohne überhaupt die Maus zu bewegen?

Also quasi sowas hier (ich weiß, geht so nicht :pale: )

Delphi-Quellcode:
DBGrid.Hint.Visible:=true;
oder geht es auch anders?

chrisw 23. Nov 2005 12:43

Re: Hint-Popup manuell anzeigen
 
In etwa so :

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  I: Integer;
  r : TRect;
begin
  r.Left := Form1.Left + BitBtn1.Left;
  r.Right := r.Left +50;
  r.Top := Form1.Top + BitBtn1.Top;
  r.Bottom := r.Top + 20;
  for I := 0 to Application.ComponentCount - 1 do
    if Application.Components[I] is THintWindow then
    begin
      with Application.Components[I] as THintWindow do
      ActivateHint(r,'hallo');
      Break;
    end;
end;

Puddi 23. Nov 2005 13:18

Re: Hint-Popup manuell anzeigen
 
Vielen Dank, das sieht schon mal ganz gut aus!

Jetzt habe ich nur noch das Problem, dass die Größe des Popup-Hints ja dadurch fest definiert wird. Der Standard-Hint passt sich ja aber der Größe seines Inhalts automatisch an.

Wie kann man das noch in dieser Prozedur unterbringen? :oops:

faux 23. Nov 2005 16:42

Re: Hint-Popup manuell anzeigen
 
Zitat:

Zitat von Puddi
Delphi-Quellcode:
DBGrid.Hint.Visible:=true;

Dies bewirkt nur, dass der Hint überhaupt angezeigt wird (also beim überfahren mit der Maus). Wenn du hier false setzen würdest, würdest du den Hint nie sehen.

Grüße
Faux

Sharky 23. Nov 2005 16:54

Re: Hint-Popup manuell anzeigen
 
Hai,

ich hatte da doch mal einen Code der zwar für das MouseMove ist. Aber Du solltest das eigentlich ohne Probleme ein deine Anforderung anpassen können.

shmia 23. Nov 2005 16:56

Re: Hint-Popup manuell anzeigen
 
Da gäbe es Application.ActivateHint(CursorPos: TPoint).
Ob das geeignet ist, musst du testen.

Puddi 24. Nov 2005 09:01

Re: Hint-Popup manuell anzeigen
 
Vielen Dank für die Hilfe :thumb: , Sharkys Codeschnipsel hat das Problem gelöst. Hab es etwas für meine Bedürfnisse angepasst:

Delphi-Quellcode:
procedure TForm1.DataMainKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var OldHint: String;
begin
  DataMain.ShowHint:=false;
  OldHint:=DataMain.Hint;
  DataMain.Hint:='Trallala';
  DataMain.ShowHint:=true;
  if (Oldhint <> DataMain.Hint) then
    begin
      Application.CancelHint;
    end;
end;

Sharky 24. Nov 2005 09:04

Re: Hint-Popup manuell anzeigen
 
Hai Puddi,

warum verwendest Du denn das OnKeyUp-Ereigniss? Wäre das OnClick nicht besser geeignet?

Puddi 24. Nov 2005 09:25

Re: Hint-Popup manuell anzeigen
 
Oha, es läuft doch noch nicht :oops: . Eben ging es problemlos, das liegt aber glaube ich daran, dass meine optische Maus zwischendurch gerne mal kleine "Hüpfer" macht. Das löst dann natürlich die automatische Hint-Anzeige aus.

Dass ich das Ganze mit dem "OnKeyUp"-Event verknüpfe, liegt daran dass das Programm ja den Hint auch anzeigen soll, wenn ich die Maus nicht bewege, sondern mit den Cursortasten den Datensatz wechsle. Das "OnClick"-Ereignis führt bereits zur Hintanzeige.

Ich werd noch mal ein wenig herumprobieren.

Sharky 24. Nov 2005 10:37

Re: Hint-Popup manuell anzeigen
 
Zitat:

Zitat von Puddi
Oha, es läuft doch noch nicht :oops: .

Hai Puddi,

Ja, ich habe mir das auch noch mal angesehen. Mein Code ist wirklich nur dafür da den Hint zu setzen. Angezeigt wird er dann bei einer Mausbewegung.

Ich habe mir jetzt verschiedene Lösungen überlegt aber keine davon war befriedigend was die Ergonomie des Programmes angeht.
Darum würde ich dir etwas ganz anderes Vorschlagen.

Schnappe dir ein Panel, setze auf dieses ein TStatusbar mit einem TStatusPanel, dann lege dein DBGrid auf das Panel (Allign = alClient) und zeige im OnAfterScroll deines TDataSet den Text in dem TStatusPanel an.

Ich finde das ist die sauberste Lösung. Wenn Du nun möchtest das der Text nicht die ganze Zeit da steht kannst Du ihn ja mit einem Timer nach x Sekunden wieder entfernen.

IMHO ist das besser als wenn ständig ein Hin-Fenster aufpopt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz