So, ich habe genau gleiches Problem einmal gehabt, und poste hier mal die OnMouseDown-Procedure. Wahrscheinlich ist es auf die uneleganteste Weise ever gelöst, und der Code ist eine schande, aber Hauptsache es funktioniert.
Eigentlich sollte es mehr oder minder selbsterklärend sein, für Support stehe ich aber gerne zur Verfügung.
Delphi-Quellcode:
procedure TForm_Hauptfenster.sg_StufenlisteMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Begin
if Y < sg_Stufenliste.RowHeights[0] then
Begin
If (X > sg_Stufenliste.ColWidths[0]+1)AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+1) then
Begin
//Feld 2 Index1
SortAendern(1);
SortMenueX;
nachVorname1.Bitmap.Assign(imHaken);
End
Else If (X > sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+2)
AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]
+sg_Stufenliste.ColWidths[2]+2) then
Begin
//Feld3
SortAendern(2);
SortMenueX;
nachName1.Bitmap.Assign(imHaken);
End
Else If (X > sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]+3)
AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+3) then
Begin
// Feld 4
SortAendern(3);
SortMenueX;
nachGeburtsdatum1.Bitmap.Assign(imHaken);
End
Else If (X > sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+4)
AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+4) then
Begin
//Feld 5
SortAendern(4);
SortMenueX;
nachStrae1.Bitmap.Assign(imHaken);
End
Else If (X > sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+5)
AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+sg_Stufenliste.ColWidths[5]+5) then
Begin
//Fald 6
SortAendern(5);
SortMenueX;
nachPostleitzahl1.Bitmap.Assign(imHaken);
End
Else If (X > sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+sg_Stufenliste.ColWidths[5]+6)
AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+sg_Stufenliste.ColWidths[5]
+sg_Stufenliste.ColWidths[6]+6) then
Begin
//Feld 7
SortAendern(6);
SortMenueX;
nachWohnort1.Bitmap.Assign(imHaken);
End
Else If (X > sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+sg_Stufenliste.ColWidths[5]
+sg_Stufenliste.ColWidths[6]+7)
AND(X < sg_Stufenliste.ColWidths[0]+sg_Stufenliste.ColWidths[1]+sg_Stufenliste.ColWidths[2]
+sg_Stufenliste.ColWidths[3]+sg_Stufenliste.ColWidths[4]+sg_Stufenliste.ColWidths[5]
+sg_Stufenliste.ColWidths[6]+sg_Stufenliste.ColWidths[7]+7) then
Begin
SortAendern(7);
SortMenueX;
nachTelefonnummer1.Bitmap.Assign(imHaken);
End;
End;
end
Else If Button = mbRight then
Begin
PopupMenue.Popup(X+Form_Hauptfenster.Left+sg_Stufenliste.Left
,Y+Form_Hauptfenster.Top+sg_Stufenliste.Top);
End;
end;
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.