Hallo liebe Experten!
Ich möchte ein kleines Programm erstellen, bei dem Daten in einem Stringgrid angezeigt werden. Wenn ich auf eine Zeile des Stringgrids doppelklicke, öffnet sich an der Stelle ein PopUp-Menü mit verschiedenen Optionen, z.B. die Daten in der angeklickten Stringgrid-Zeile an einer anderen Stelle des Programms öffnen, um sie bearbeiten zu können.
Nach dem Doppelklick auf die Zeile soll diese eingefärbt werden, damit man sofort sieht, welche Zeile gerade in Verwendung ist. Das habe ich mit folgendem Code in etwa erreicht:
Delphi-Quellcode:
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
Form1.StringGrid1.OnDrawCell := StringGrid1DrawCell;
GridColorCell := true;
StringGrid1.Repaint;
PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Form1.StringGrid1.OnDrawCell := nil;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var i: Integer;
begin
if GridColorCell then
begin
Form1.StringGrid1.Canvas.Brush.Color:=clGreen;
If aRow = Form1.StringGrid1.Row then
with Form1.StringGrid1 do
begin
for i := (ColCount-5) to (ColCount) do
begin
Canvas.FillRect(Rect);
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+5, Cells[ACol, ARow]);
end;
end;
end;
end;
Wenn ich das ausführe, sieht es nach dem Doppelklick auf eine Zeile aus wie in der angehängten Bilddatei. Jetzt meine Fragen:
- Wenn ich dann einen Einzelklick auf irgendeine weiße Zelle ausführe, wird diese mit dem gepunkteten Rahmen angezeigt, und eine der grünen Zellen wird auch weiß, wie im zweiten angehängten Bild. Wie kann ich das verhindern? Ich möchte am liebsten, dass bei Einzeklicks nichts selektiert wird.
- Wie erreiche ich es, dass die weißen Zwischenräume zwischen den grünen Zellen verschwinden? Die angewählte Zeile soll durchgängig farbig sein.
Vielen Dank im Voraus für Eure Hilfe!