AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi StringGrid -> Spalte zeichnen, obwohl ausserhalb der Screen
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid -> Spalte zeichnen, obwohl ausserhalb der Screen

Ein Thema von HolgerCW · begonnen am 5. Nov 2007 · letzter Beitrag vom 7. Nov 2007
Antwort Antwort
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

StringGrid -> Spalte zeichnen, obwohl ausserhalb der Scre

  Alt 5. Nov 2007, 11:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 12:17
Und was soll das bringen etwas zeichnen zu wollen was gar nicht sichtbar ist?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 12:47
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 12:51
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 13:03
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
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 14:24
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
Ralph
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 14:28
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
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 14:34
Hallo Holger,
tja 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
Ralph
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#9

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 5. Nov 2007, 15:23
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
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#10

Re: StringGrid -> Spalte zeichnen, obwohl ausserhalb der

  Alt 7. Nov 2007, 11:51
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:

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 ?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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