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
Application.HideHint;
an den Anfang der Prozedur zu schreiben, aber dann wird der Hint garnicht angezeigt.
Vieleicht weiss ja einer von euch einen Rat
Mfg
Jonny