![]() |
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 |
Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
Und was soll das bringen etwas zeichnen zu wollen was gar nicht sichtbar ist?
|
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 |
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.
|
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 |
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 |
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 |
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 |
Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der
Zitat:
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 |
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:
Damit es sauberer Aussieht im OnTopLeftChanged-Ereignis:
//Ü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;
Delphi-Quellcode:
Gruss
STG_UP_JahresPlaner.Repaint; //Beim Scrollen des StringGrids immer neu Zeichnen lassen. Ist noch schnell genug
Holger P.S.: Vielleicht weiss ja jemand wie man das optimieren kann ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr. |
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