AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStringgrid - Width und ColWidth

Ein Thema von Delbor · begonnen am 1. Apr 2021 · letzter Beitrag vom 3. Apr 2021
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.014 Beiträge
 
Delphi 10.4 Sydney
 
#1

TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 15:25
Hi zusammen

In einem Containerframe habe ich 4 Frameinstanzen( im Endeffekt sollen es 12 sein):
4monate.jpg
Im Container gibts dies:
Delphi-Quellcode:
   for i := Low(Monate) to High (Monate) do
   begin
      case i of //ContentDayNumberFrameUnit; DayNrFrameApril
         1: begin
               Self.DayNrFrameJanuary.InitDayNumberFrame;
               LMonth := I;
               Self.DayNrFrameJanuary.FirstMonthDay := StartOfAMonth(LYear, LMonth);
               Self.DayNrFrameJanuary.LastMonthDay := EndOfAMonth(LYear, LMonth);
               Self.DayNrFrameJanuary.LblCaption.Caption := Monate[i];
               Self.DayNrFrameJanuary.HorzDayNumbersMonths;
            end;
         2: begin
               Self.DayNrFrameFebruary.InitDayNumberFrame;
               LMonth := I;
               {Die Einstellungen hier sind Wiederholungen auf eine andere Instanz}
            end;
         3: ...

         4: ...

         5: ....

         12:...

            end;
      end;
Im Basisframe gibts die Public deklarierte Prozedur InitDayNumberFrame, die, da sie Public deklariert ist, an Frameinstanzen wie DayNrFrameFebruary oder DayNrFrameApril vererbt werden sollte:
Delphi-Quellcode:
procedure TDayNumberFrame.InitDayNumberFrame;
begin
  Self.StrGCalendarMonthFrame.ColWidths[0] := 40;
  Self.StrGCalendarMonthFrame.ColWidths[1] := 30;
  Self.StrGCalendarMonthFrame.ColWidths[2] := 30;
  Self.StrGCalendarMonthFrame.ColWidths[3] := 30;
  Self.StrGCalendarMonthFrame.ColWidths[4] := 30;
  Self.StrGCalendarMonthFrame.ColWidths[5] := 30;
  Self.StrGCalendarMonthFrame.ColWidths[6] := 30;
  Self.StrGCalendarMonthFrame.ColWidths[7] := 30;
  Self.StrGCalendarMonthFrame.Width := 8*30;
end;
Das Strinnggrid sollte zur Laufzeit also nicht breiter als die Summe seiner Spaltenbreiten sein. Ist aber nicht. Das grid und seine Breitenverhältnisse werden genauso dargestellt, wie im jpeg widergegeben.
Was ist da falsch?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
bcvs
Online

Registriert seit: 16. Jun 2011
558 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 15:39
Was ist denn das Alignment von dem StrGCalendarMonthFrame? Wenn das alClient ist, bringt ja Width := 8*30 nichts
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.256 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 16:25
Abgesehn von einem eventuellen Align, stimmt da eh etwas nicht.

* deine Rechnung ist Falsch
40+7*30, denn siehe ColWidths[0] := 40;
und muüßte man nicht noch die Linie zwischen den Columns hinzurechnen?
also 41+7*31

und vielleicht auch noch eine eventuelle Scrollbar, falls malc mehr Rows/Zeilen

* und wie man genau sieht, sind alle Spalten gleich breit, was auch nicht stimmen kann, denn siehe ColWidths[0] := 40;
"sollte" ist kein "ist wirklich so", was man aber mit dem Debugger bestimmt leicht prüfen könnte
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.014 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 17:36
Hi zusammen

Was ist denn das Alignment von dem StrGCalendarMonthFrame? Wenn das alClient ist, bringt ja Width := 8*30 nichts
Das war der wichtige Hinweis - ich habe das alClient durch
alignal := Custom ersetzt und die Anchors stehen lassen. Ich hab zwar nie wirklich verstanden, was das "alCustom" bewirkt oder bewirken soll. Klar ist nur: das Grid klebt jetzt an der linken Seite.

Die Breitenzuweisung, auch für TDayNumberFrame, ist nun so:
Delphi-Quellcode:
  Self.StrGCalendarMonthFrame.Width := (7*30) + 40 + 10;
  Self.Width := StrGCalendarMonthFrame.Width;
GridLineWidth ist hier das (Standard-) 1 - da hab ich mich erstmal verzählt und nur den Wert 7 statt 9 eingesetzt. Schliesslich habe ich stattdessen sogar auf 10 erhöht. Korrekt wäre wohl eher Borderwith*2...

Im Moment sieht das so aus:
4monate-ii.jpg

Abgesehn von einem eventuellen Align, stimmt da eh etwas nicht.

* deine Rechnung ist Falsch
40+7*30, denn siehe ColWidths[0] := 40;
und muüßte man nicht noch die Linie zwischen den Columns hinzurechnen?
also 41+7*31
Ja, die Rechnung war falsch - und sorry, sie ist es leider auch so noch. Zwischen den 8 Spalten sind 7 Trennlinien plus eine vor der ersten und eine nach der letzten Spalte. Es reicht also nicht, jeder Spalte eine Trennlinie dazuzurechnen. Aber zugegeben: das ist meine Theorie und kein Blick in die .pas.

und vielleicht auch noch eine eventuelle Scrollbar, falls malc mehr Rows/Zeilen
Die Scrollbars kommen weg. Das Grid soll die Tage eines Monats anzeigen, nicht mehr und nicht weniger. Wenn letztlich noch gescrollt werden muss, so der Container. der diese Frameinstanzen enthält.

* und wie man genau sieht, sind alle Spalten gleich breit, was auch nicht stimmen kann, denn siehe ColWidths[0] := 40;
"sollte" ist kein "ist wirklich so", was man aber mit dem Debugger bestimmt leicht prüfen könnte
[/QUOTE]
Das verstehe ich jetzt nicht wirklich. Die erste Spalte ist momentan breiter als die anderen, weil sie nebst dem 'W' auch noch die Wochennummer aufnehmen soll.
Eine Alternative wäre, das W in die 1. Zeile vor die Tagesname zu schreiben und ansonsten in der ersten Spalte nur noch die Wochennummern hinzuschreiben.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.256 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 17:50
Das verstehe ich jetzt nicht wirklich.
Die erste Spalte ist momentan breiter als die anderen,
Aber nicht in dem Bild in Post #1. Dort sind alle Spalten gleich breit.

Zitat:
Es reicht also nicht, jeder Spalte eine Trennlinie dazuzurechnen. Aber ...
Ja OK, die Columns, die Trenner dawischen/davor/dahinter (können auch teilweise ins ColWidth einbezogen sein) und natürlich noch der Rahmen der Komponente drumrum.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 1. Apr 2021 um 17:54 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.721 Beiträge
 
Delphi 7 Professional
 
#6

AW: TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 22:07
Ich hab zwar nie wirklich verstanden, was das "alCustom" bewirkt oder bewirken soll.
Das heißt schlicht und einfach: Die Werte von Left, Width, Top und Height sind für die Darstellung maßgebend.
Oder: Jeder Automatismus für die Positionierung der Komponente ist ausgeschaltet.

Das Design, die Position, Höhe, Breite müssen selbst geregelt werden, also genau das, was Du gerade beabsichtigst.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.014 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TStringgrid - Width und ColWidth

  Alt 1. Apr 2021, 23:49
Hi Delphi-Natrium

Ich hab zwar nie wirklich verstanden, was das "alCustom" bewirkt oder bewirken soll.
Das heißt schlicht und einfach: Die Werte von Left, Width, Top und Height sind für die Darstellung maßgebend.
Oder: Jeder Automatismus für die Positionierung der Komponente ist ausgeschaltet.

Das Design, die Position, Höhe, Breite müssen selbst geregelt werden, also genau das, was Du gerade beabsichtigst.
Damit wäre es dasselbe wie Align := alNone, wenn ich das jetzt (und bisher eigentlich auch) richtig verstanden habe. Danke für die Info.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.256 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TStringgrid - Width und ColWidth

  Alt 2. Apr 2021, 06:39
Damit wäre es dasselbe wie Align := alNone,
Nein.

Schonmal auf die Idee gekommen die Hilfe zu fragen?
Delphi-Referenz durchsuchenVcl.Controls.TAlign

alNone macht garnichts

und bei alCustom mußt DU, in entsprechend Events, das selbst ausrichten,
oder der Parent enthält Funktionen, um seine Untercontrols auszurichten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Apr 2021 um 06:41 Uhr)
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.014 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TStringgrid - Width und ColWidth

  Alt 3. Apr 2021, 20:03
Hi zusammen
Schonmal auf die Idee gekommen die Hilfe zu fragen?
Delphi-Referenz durchsuchenVcl.Controls.TAlign

alNone macht garnichts

und bei alCustom mußt DU, in entsprechend Events, das selbst ausrichten,
oder der Parent enthält Funktionen, um seine Untercontrols auszurichten.
Ja, eigentlich schon - nur eben bei Align&Co eher nicht. Hab dies mal etwas nachgeholt:
TAlign
CustomAlignInsertBefore
CustomAlignPosition
OnAlignPosition

Trotzdem bleiben mir noch einige Verständnisfragen. alCustom ausgerichtete Komponenten müssen über NewLeft, NewTop,NewRight und NewBottom erfasst/ausgerichtet werden, sonst schweben die irgendwo im Nirwana (und eher zufällig auf dem Bildschirm).

Frage1: Können TAlign-Typen und Events wie OnAlignPosition auch automatisch auf Grössenänderungen reagieren, wie zB.Skalierungen aller Art?
Meine Überlegung dahinter: X := 5 ist in einem bereits skalierten Objekt nicht am selben Ort wie in einem selben, aber nicht skalierten Objekt.
Frage2: Was ist vorteilhafter / aufwändiger: Left&CO direkt zuzuweisen oder über Align:= al Custom?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 11:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf