Delphi-PRAXiS
Seite 2 von 2     12   

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 Linklabel in einem Stringgrid - Idee gesucht (https://www.delphipraxis.net/68525-linklabel-einem-stringgrid-idee-gesucht.html)

Martin K 1. Mai 2006 20:42

Re: Linklabel in einem Stringgrid - Idee gesucht
 
@marabu:
Man müsste dann noch für den Hover-Text wieder die X und Y-Position für Canvas.TextOut ermitteln.
Da kann man ja nicht einfach die Mouse-Position nehmen, die ändert sich ja ständig und bleibt nicht immer genau in der linken Ecke der Zelle :wink:

Bei meinem Code ist das schon mit drin :P

Gruß, Martin

Hawkeye219 1. Mai 2006 20:56

Re: Linklabel in einem Stringgrid - Idee gesucht
 
@marabu

Siehst du, war doch zu einfach! Du bräuchtest nämlich jetzt eine Funktion, die dir zu iCol und iRow das passende "CellRect" liefert.

Gruß Hawkeye

marabu 1. Mai 2006 21:08

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Verflixt - habe immer gedacht, das wäre genau der Parameter Rect im Ereignis OnDrawCell().

marabu *zerknirscht ist*

turboPASCAL 1. Mai 2006 21:24

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Huch, da ist mir aber Arbeit abgenommen worden... vor allenm das Nachdenken ;)

Das schöne ist es Hovert schon mal, für den Rest muss ich mir noch was Einfallen lassen, weil die Zeilen unterschiedliche Farben haben...


Ein dickes THX. :thumb:

marabu 1. Mai 2006 21:48

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Nur für den Fall, dass jemand unabhängig von der Zelldimensionierung sein möchte - hier noch der Ansatz, auf den ich euch stoßen wollte:

Delphi-Quellcode:
procedure TDemoForm.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  iCol, iRow: Integer;
  p: TPoint;
begin
  with Sender as TStringGrid do
  begin
    DoubleBuffered := true; // hier nur als Hinweis
    p := ScreenToClient(Mouse.CursorPos);
    MouseToCell(p.X, p.Y, iCol, iRow);
    if (iCol = ACol) and (iRow = ARow) then
    begin
      if gdSelected in State
        then Canvas.Font.Color := clHighlightText
        else Canvas.Font.Color := clHighlight;
      Canvas.Font.Style := Canvas.Font.Style + [fsUnderline];
    end;
    Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
  end;
end;

procedure TDemoForm.SGMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  SG.Invalidate;
end;
Gute Nacht vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.
Seite 2 von 2     12   

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