Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hint verschwindet nicht (https://www.delphipraxis.net/25538-hint-verschwindet-nicht.html)

Jonny-Flash 8. Jul 2004 07:04


Hint verschwindet nicht
 
Ich habe folgendes Problem:
In meinem Programm werden in einem Stringgrid werden Daten aus einer Datenbank angezeigt. Nun lasse ich mir, wenn der Mauszeiger über einem Datensatz steht die Daten dafür anzeigen. Allerdings verschwindet dieser Hint erst, wenn ich das Stringgrid mit dem Mauszeiger verlasse und nicht schon beim Mousemove, wie er ja eigentlich sollte. Ich poste hier mal einen Auszug aus meinem Programm.

Delphi-Quellcode:
procedure TMain.sgDispMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
// Variablen
begin
  // Mauszeiger auf Stringgrid-Position umrechen
  x1 := X / 21;
  x2 := trunc(x1) - 1;
  y1 := Y / 21;
  y2 := trunc(y1);
  y2 := (y2 * 20) - 20;
  intMousePos := x2 + y2;

  // Datensatz aus Datenbank holen
  if ((x2 >= 0) AND (y2 >= 20)) then
  begin
    case components[intMousePos] of
      'T' : Txt.GetTxtName(strTxtName,intMousePos,intFraID,intTxtID);
      'B' : Btn.GetBtnName(strBtnName,intMousePos,intFraID,intBtnID);
      'V' : Vari.GetVarName(strVarName,intMousePos,intFraID,intVarID);
      'L' : Lst.GetLstName(strListName,strColName,intMousePos,intFraID,
        intListID, intColNr);
      'C' : Lst.GetLstName(strListName,strColName,intMousePos,intFraID,
        intListID, intColNr);
    end;

    // Wenn es ein Text war :
    if (strTxtName<>'') then
    begin
      strComp := 'Text: ';
      // Datensätze aus der Datenbank holen.
      with dm.setTxtID do
      begin
        intTxtPos := FieldByName('Txt_Pos').AsInteger;
        intTxtLng := FieldByName('Txt_Length').AsInteger;
        strTxtCap := FieldByName('Txt_Caption').AsString;
      end;
      // Die Hintdarstellung ist tabellarisch, d.h. Sprung ins Unterprogramm...
      sgDisp.Hint := strComp + ';' +
                     '' + ';' +
                     'Frame ID<@=80@>' + ': ' + IntToStr(intFraID) + '<@=120@>' + ';' +
                     'Text ID<@=80@>' + ': ' + IntToStr(intTxtID) + '<@=120@>' + ';' +
                     'Text name<@=80@>' + ': ' + strTxtName + '<@=120@>' + ';' +
                     'Text pos.<@=80@>' + ': ' + IntToStr(intTxtPos) + '<@=120@>' + ';' +
                     'Text length<@=80@>' + ': ' + IntToStr(intTxtLng) + '<@=120@>' + ';' +
                     'Text caption<@=80@>' + ': ' + strTxtCap;
    end;
    // ... geht hier noch weiter, aber zwecks übersichtlichkeit weggelassen ...
  end;
end;
Hab schon versuch
Delphi-Quellcode:
  Application.HideHint;
an den Anfang der Prozedur zu schreiben, aber dann wird der Hint garnicht angezeigt. :gruebel:

Vieleicht weiss ja einer von euch einen Rat

Mfg
Jonny

Keldorn 9. Jul 2004 18:04

Re: Hint verschwindet nicht
 
Hallo
Zitat:

// Mauszeiger auf Stringgrid-Position umrechen
gugg dir mal mousetocell an.
Ansonsten könnte application.cancelhint weiterhelfen und schau hier (vorletztes Post):
http://www.delphipraxis.net/internal...tringgrid+hint

Mfg Frank

Jonny-Flash 12. Jul 2004 07:12

Re: Hint verschwindet nicht
 
Hallo Frank,
das klappt jetzt wunderbar :-D .

:gruebel: Wieso hab ich das nicht schon vorher beim Suchen gefunden.

Hier nochmal meine Lösung, damit der Hint verschwindet:

Delphi-Quellcode:
procedure TMain.sgDispMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var strOldHint : String;
begin
  strOldHint := sgDisp.Hint;

// ....
// ....
// ....

  if (strOldHint <> sgDisp.hint) then
    Application.CancelHint;
end;
Nochmals vielen Dank :mrgreen:
Jonny.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 Uhr.

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