Delphi-PRAXiS

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 StringGrid: Text über mehrer Spalten (https://www.delphipraxis.net/36924-stringgrid-text-ueber-mehrer-spalten.html)

fafnir 28. Dez 2004 11:30


StringGrid: Text über mehrer Spalten
 
Hallo :-D ,

da ich schon mehrer Foren nach Lösungen durchsucht habe, seit ihr mein letzte Hoffnung :mrgreen: .
Ich möchte in einem StringGrid Spaltenüberschriften über mehrer Spalten hinweg schreiben, so dass es ähnlich wie in Excel aussieht, wenn man Text über mehere Zellen hinweg verbindet.

Im OnDrawCell-Event habe ich versucht, mit Canvas.FillRect einen entsprechend großen horizontalen Bereich mit Farbe zu füllen und danach mit DrawText den Text dort auszugeben. Leider sieht es so aus, als würden die nachfolgenden Spalten meinen Text wieder überschreiben. :wall:

Was mache ich falsch :gruebel: ? Jeder Tip wird dankbar angenommen!

fafnir

semo 31. Dez 2004 21:14

Re: StringGrid: Text über mehrer Spalten
 
wie wär es denn wenn du deinen bereits erstellten code postest?


können den dann ja mal durchgehen.

Hansa 31. Dez 2004 21:28

Re: StringGrid: Text über mehrer Spalten
 
Verwende
Delphi-Quellcode:
if ARow <= FixedRows
im DrawText, damit nur die Überschriften betroffen sind.

fafnir 1. Jan 2005 10:04

Re: StringGrid: Text über mehrer Spalten
 
Hallo und ein frohes neues Jahr!
Mein Problem hat sich durch den folgenden Link erledigt:
http://www.delphi-groups.de/YaBBSe/i...=22383;start=0
Der Autor hat das Problem mit verbundenen Zellen sehr gut gelöst :thumb:
Wer den kompletten Quelltext anschaut, sollte die folgende Änderung beachten: :idea: :!:
Delphi-Quellcode:
function CellRectEx(Stringgrid:tstringgrid;Acol,Arow:integer):trect;
var i,x,y:integer;
    arect,brect:Trect;
begin
  //Zellenposition mit Cellrect ermitteln
  brect:=Stringgrid.CellRect(acol,arow);
  if EqualRect(brect,classes.rect(0,0,0,0))=false then
  begin
    if (StringGrid.ColWidths[aCol] > (bRect.Right-bRect.Left)) //sichtbarer Teil der Zelle
      then bRect.Right := bRect.Left+StringGrid.ColWidths[aCol];//kleiner als Zellenbreite?? 
    result:=brect;
  end
else.....
Die kommentierte If-Anweisung ist eine Ergänzug von mir, damit auch die eventuell nur teilweise sichtbare letzte rechte Spalte beim Scrollen korrekt gezeichnet wird.

Viel Spass beim Ausprobieren
fafnir


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz