Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid -> Spalte zeichnen, obwohl ausserhalb der Screen (https://www.delphipraxis.net/102809-stringgrid-spalte-zeichnen-obwohl-ausserhalb-der-screen.html)

HolgerCW 5. Nov 2007 11:57


StringGrid -> Spalte zeichnen, obwohl ausserhalb der Scre
 
Hallo zusammen,

gibt es eine Möglichkeit, eine Spalte zeichnen zu lassen, obwohl diese ausserhalb der Screen ist.

Wieso ? -> Jede 31te Spalte macht ein Rect.Left - (30 * 6).

Gruss

Holger

Bernhard Geyer 5. Nov 2007 12:17

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Und was soll das bringen etwas zeichnen zu wollen was gar nicht sichtbar ist?

HolgerCW 5. Nov 2007 12:47

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Da ich durch Rect.Left - (30 * 6). mehrere Spalten zu einer verbinde, wird die letzte "gross" Spalte nicht mehr gezeichnet, da der Auslöser dazu eine Spalte ist, die ausserhalb des Sichtbaren Bereiches liegt.

Gruss

Holger

Bernhard Geyer 5. Nov 2007 12:51

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Wie wäre es wenn die erste auslösende Zelle die komplette Zelle neu zeichnet und du dir merkst das sie schon neu gezeichnet wurde. Ansonsten mußt du tiefer bei der Basisklasse anfangen und nicht nur das einzelne Zellenzeichnen überschreiben.

HolgerCW 5. Nov 2007 13:03

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Habe ich auch schon versucht.

Dabei war mein Problem, das wenn ich anstatt Rect.Left - (30 * 6) jetzt:

Rect.Right + (30 * 6) nehme, das zwischen den einzelnen Spalten immer noch die Trennlinie in Hellgrau zu sehen ist.

Mache ich da was falsch ?

Gruss

Holger

taaktaak 5. Nov 2007 14:24

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Moin, Moin Holger.
Habe ein wenig das Problem, die Überschrift mit dem Problem zusammen zu bringen. "Ausserhalb des Screen ..." du meinst doch ausserhalb des sichtbaren StringGrid-Ausschnitts, oder? Wenn du, wie zuletzt beschrieben, die Zelle nach rechts vergrößerst, also ..Right+irgendetwas.. und dann in den rechts stehenden Zellen die hellgrauen Trennlinien erscheinen, sieht mir das ein bisschen danach aus, dass die von Delphi nachträglich "über deine Verbreiterung" gezeichnet werden. Du verbindest zwar, aber Delphi macht es wieder kaputt. Überprüfe doch mal meinen Gedanken...
Gruß Ralph

HolgerCW 5. Nov 2007 14:28

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Hi TaakTaak,

ich zeichne ja Rückwärts.

Wenn Spalte 3 erreicht wird TRect.Left - Width von Spalte 1+2 gerechnet.

Nun ist Spalte 3 ausserhalb des sichtbaren Bildes und wird daher nciht gezeichnet, somit auch nicht TRect.Left - Width von Spalte 1+2 gerechnet.

Dein Gedanke kommt vielleicht hin, nur wie kann ich das am besten prüfen ?

Sehe ja immer nur das Ergebnis.

Gruss

Holger

taaktaak 5. Nov 2007 14:34

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Hallo Holger,
tja :roll: wie könnte man das anstellen? Habe da nicht so recht 'ne zündende Idee; aber blöde Frage: Ist DefaultDrawing vom Grid noch auf true gesetzt? Wenn ja, mal auf false setzen...
Gruß Ralph

Reinhard Kern 5. Nov 2007 15:23

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Zitat:

Zitat von HolgerCW
Hi TaakTaak,

ich zeichne ja Rückwärts.

Wenn Spalte 3 erreicht wird TRect.Left - Width von Spalte 1+2 gerechnet.

Nun ist Spalte 3 ausserhalb des sichtbaren Bildes und wird daher nciht gezeichnet, somit auch nicht TRect.Left - Width von Spalte 1+2 gerechnet.

Dein Gedanke kommt vielleicht hin, nur wie kann ich das am besten prüfen ?

Sehe ja immer nur das Ergebnis.

Gruss

Holger

Hallo,

du verlässt dich da drauf, dass die Spalten in der Reihenfolge 1,2,3... gezeichnet werden. Das ist aber, wenn überhaupt (ist nicht dokumentiert), dann nur beim kompletten Neuzeichnen des Grids der Fall. Ich denke daher, dass dein Entwurf, bei Spalte 3 einzugreifen und 1-3 zu zeichnen, sowieso nicht immer funktionieren wird.

Gruss Reinhard

HolgerCW 7. Nov 2007 11:51

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
 
Hier meine Lösung (Lasse ALLE Spalten rückwärts Zeichnen, bis zum Anfang des gerade aktuellen Monats):

Info: Habe 366 Spalten. 1 Spalte = 1 Tag

In dem Ereignis on DrawCell
Delphi-Quellcode:
//Überschriften Monate eintragen
if (ACol > 1) AND (ARow = 0) then
begin
 
 //Datum der Spalte herrausfinden
 Datum := EncodeDateDay(strtoint(FormTerMas.CB_UP_Jahr.text), ACol - 1);
 
 //Bis zum ersten eines Monats rückwärts Zeichnen
 Rect.Left := Rect.Left + 1 - (6 * (ACol - DayOfTheYear(strtodate('01.' + inttostr(Monthof(Datum)) + '.' + CB_UP_Jahr.Text))));
 // Erste Spalte (Width = 125) soll nicht überzeichnet werden. Da stehen die User
 if Rect.Left < 126 then Rect.Left := 126;
 //Zeichnen
 Canvas.FillRect(Rect);
 //Text des aktuellen Monats ausgeben
 Canvas.TextOut(Rect.Left + 2,Rect.Top + 5, LongMonthNames[Monthof(Datum)]);

end;
Damit es sauberer Aussieht im OnTopLeftChanged-Ereignis:

Delphi-Quellcode:
STG_UP_JahresPlaner.Repaint; //Beim Scrollen des StringGrids immer neu Zeichnen lassen. Ist noch schnell genug
Gruss

Holger

P.S.: Vielleicht weiss ja jemand wie man das optimieren kann ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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