Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

turboPASCAL 1. Mai 2006 08:12


Linklabel in einem Stringgrid - Idee gesucht
 
Hi,

Ich möchte gern in einem Stringgrid eine Art Linklabel einbauen. Da ich so ziemlich faul bin ^^, frag ich erst einmal hier in der DP nach ob jemand sowas schon mal gemacht hat oder Codeschnipsel hat.

Man muss ja nix neu erfinden wenn es schon erfunden ist. :stupid:

Nein ich will keine Komponenten werwenden ala JVCL. (nicht das die schlecht sind...)

Hansa 1. Mai 2006 10:05

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Wer zum Teufel soll denn mit dem Begriff "Linklabel" etwas anfangen ? Meine Glaskugel meint lediglich, es könne sich eventuell um einen Hyperlink (abgekürzt "Link") handeln, also einen Verweis auf Internetseite, der im Stringgrid als string angezeigt und per Doppelklick aktiviert werden soll.

turboPASCAL 1. Mai 2006 19:34

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Genau, Linklabel ist also doch Aussagekräftig genug gewesen. ;)

Einfach einen Hyperlink in einem Stringgrid der sich wie ein "normaler" Hyperlink im Browser verhält.
OnMouseOver wirs dann unterstrichen und bei OnClick die entspr. Seite per ShelExec oder so...

Das Problem ist das ich noch keinen Anfag gefunden habe da ich keine Komponente vom Stringgrid ableiten möchte.

Martin K 1. Mai 2006 19:40

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Also grob gesagt:

Du willst ein StringGrid, in jeder Zelle steht irgendein Text (dein Link).
Jenachdem auf welche Zelle man dann geklickt hat, wird dann der entsprechende Link per ShellExecute ausgeführt.

Nach das kann doch eigentlich nicht so schwer sein, sowas selber zu basteln...

//edit:
Per OnMouseMove kann man dann ja abfragen auf welcher Zelle man sich grad befindet und per Canvas.Font und Canvas.TextOut kann dann der Text in der Zelle formatiert werden (z.B. blau und unterstrichen) für einen schönen Hover-Effekt.

turboPASCAL 1. Mai 2006 20:03

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Hm, eigentlich nicht. Ich komm nicht drauf mit MouseMove die richtige Zelle zu erwischen.
Die Schwierigkeit ist halt das Hover setzen bie Mouseover...

Es geht um die Internetadressen für dieses Programm: [Tool] iAdressen - Passwortverwaltung

Martin K 1. Mai 2006 20:13

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Beim Ereignis OnMouseMove hat du X und Y Position.
Daraus lässt sich dann die Zelle berechnen.

Zunächst mal eine Frage vorab:
Verwendest Du immer die gleiche Zellenbreite und -höhe oder immer unterschiedliche ?
Wenn es immer die gleiche ist müsste es sich mit DefaultRowHeight bzw. DefaultColWidth berechnen lassen.
Ansonsten muss du es über RowHeights[i] bzw. ColWidths[i] machen und dann halt alle Zellen von 0 bis i abklappern...

Hawkeye219 1. Mai 2006 20:19

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Man könnte auch das StringGrid für sich arbeiten lassen: Delphi-Referenz durchsuchenMouseToCell.

Gruß Hawkeye

Martin K 1. Mai 2006 20:24

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Hab mal grad was gebastelt:

So erhältst du mit MouseMove deine aktuelle Zelle, in der du grad mit der Mouse bist:
Ich denke es ist klar, was Col und Row für Werte liefern!

Delphi-Quellcode:
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i, Row, Col: Integer;
begin
  i := 0;
  Col := -1;
  Row := -1;

  While i <= X do
  begin
    Inc(Col);
    i := i + StringGrid1.ColWidths[Col] +1;
  end;

  i := 0;
  While i <= Y do
  begin
    Inc(Row);
    i := i + StringGrid1.RowHeights[Row] +1;
  end;

  Caption := 'Aktuelle Position: '+Inttostr(Col)+', '+Inttostr(Row);
end;

marabu 1. Mai 2006 20:30

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Hallo Hawkeye,

Delphi-Quellcode:
p := ScreenToClient(Mouse.CursorPos);
MouseToCell(p.X, p.Y, iCol, iRow);
sieht irgendwie nach nichts aus - viel zu einfach, oder?

Freundliche Grüße vom marabu

Martin K 1. Mai 2006 20:38

Re: Linklabel in einem Stringgrid - Idee gesucht
 
Hm...

Nur gut das ich grad mit viel Mühe diesen Code gebastelt hab...
Aber er funzt auch!!!
Ein richtiger Hover-Effekt!!!

Okay, zugegeben:
Mit MouseToCell ist es wesentlich einfacher.

Delphi-Quellcode:
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i, j, Row, Col: Integer;
begin
  StringGrid1.Repaint;

  i := 0;
  j := 0;
  Col := -1;
  Row := -1;

  While i <= X do
  begin
    Inc(Col);
    i := i + StringGrid1.ColWidths[Col] +1;
  end;
  i := i - StringGrid1.ColWidths[Col] +1;

  While j <= Y do
  begin
    Inc(Row);
    j := j + StringGrid1.RowHeights[Row] +1;
  end;
  j := j - StringGrid1.RowHeights[Row] +1;

  StringGrid1.Canvas.Font.Color := clBlue;
  StringGrid1.Canvas.Font.Style := StringGrid1.Canvas.Font.Style + [fsUnderline];
  StringGrid1.Canvas.TextOut(i, j, StringGrid1.Cells[Col,Row]);

end;
//edit: Code noch etwas übersichtlicher gestaltet.


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

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