![]() |
Re: Objekte dynamisch mit Form skalieren
Gnah Anchors hätte mir heut echt etwas arbeit erspart, da ich heut vormittag resizing programmiert habe *fg*
Zu den Columns : Ich habs so gelöst : Mir zur Designzeit die Werte für die Breiten des Grids und der einzelnen Spalten aufgeschrieben und daraus einen Breitenfaktor errechnet. Das sieht dann bei mir so aus :
Delphi-Quellcode:
Das mit den Rundungsfehlern kannste vermutlich weglassen, bei mir musste es nur sehr genau sein.
//columns im grid
iGridSize := DBGrid1.Width - 27; // 27 ist breite der vertikalen scrollbar dblFaktor := 68/722; DBGrid1.Columns.Items[0].Width := round(dblFaktor*iGridSize); dblFaktor := 102/722; DBGrid1.Columns.Items[1].Width := round(dblFaktor*iGridSize); dblFaktor := 91/722; DBGrid1.Columns.Items[2].Width := round(dblFaktor*iGridSize); dblFaktor := 107/722; DBGrid1.Columns.Items[3].Width := round(dblFaktor*iGridSize); dblFaktor := 105/722; DBGrid1.Columns.Items[4].Width := round(dblFaktor*iGridSize); dblFaktor := 81/722; DBGrid1.Columns.Items[5].Width := round(dblFaktor*iGridSize); dblFaktor := 100/722; DBGrid1.Columns.Items[6].Width := round(dblFaktor*iGridSize); dblFaktor := 68/722; DBGrid1.Columns.Items[7].Width := round(dblFaktor*iGridSize); //rundungsfehler korrigieren iTemp := 0; for i:= 0 to DBGrid1.Columns.Count -1 do begin iTemp := iTemp + DBGrid1.Columns.Items[i].Width; end; //gesamtbreite aller columns nach resize (iTemp) sollte gleichgross sein wie Gridbreite - Scrollbarbreite iTemp := iGridSize - iTemp; if not (itemp = 0) then //abweichungen werden durch resizen der Column Zone ausgeglichen DBGrid1.Columns.Items[1].Width := DBGrid1.Columns.Items[1].Width + iTemp; Das Resizen der Columns kannst auch vereinfachen indem du die Faktoren in ein Array packst oder so und dann (wie beim addieren unten) in einer Schleife die Columns einstellst. Nur ich musste das schnell hinter mich bringen und hatte keine lust mir da was zu überlegen und habs dann so hingeschmiert 8) |
Re: Objekte dynamisch mit Form skalieren
:| ähm.... ja...
ich habe keinen schimmer! welche typen haben denn deine variablen? und wie rechnest du den gridfaktor aus? sorry, bin noch nicht so weit in delphi... Gruß, dopeline |
Re: Objekte dynamisch mit Form skalieren
also das mit dem resizen funktionert super!
nur das mit der einen spalte, zu der dann die übrichgebliebene "breite" hinzugefügt wird, funktionert bei mir nicht er sagt in der letzten zeile (s.u.) " Inkompatible Typen: 'Integer' und 'Extended' " vielleicht habe ich die variablen falschen typen zugeordnet...
Delphi-Quellcode:
woran kann das liegen?
procedure TFormHaupt.FormResize(Sender: TObject);
var i:byte; iTemp,iGridSize,dblFaktor:real; begin iGridSize := SGS.Width; dblFaktor := 40/899; SGS.ColWidths[0] := round(dblFaktor*iGridSize); dblFaktor := 99/899; SGS.ColWidths[1] := round(dblFaktor*iGridSize); dblFaktor := 128/899; SGS.ColWidths[2] := round(dblFaktor*iGridSize); dblFaktor := 51/899; SGS.ColWidths[3] := round(dblFaktor*iGridSize); dblFaktor := 135/899; SGS.ColWidths[4] := round(dblFaktor*iGridSize); dblFaktor := 146/899; SGS.ColWidths[5] := round(dblFaktor*iGridSize); dblFaktor := 144/899; SGS.ColWidths[6] := round(dblFaktor*iGridSize); dblFaktor := 128/899; SGS.ColWidths[7] := round(dblFaktor*iGridSize); iTemp := 0; for i:= 0 to SGS.ColCount -1 do iTemp := iTemp + SGS.ColWidths[i]; iTemp := iGridSize - iTemp; if not (itemp = 0) then SGS.ColWidths[7] := SGS.ColWidths[7] + iTemp; // an dieser stelle meckert er (s.o.) end; @Smokey wie hast denn deine variablen deklariert? Gruß, dopeline |
Re: Objekte dynamisch mit Form skalieren
Preisfrage: Was ist die oberste Property im OI für ein StringGrid?
|
Re: Objekte dynamisch mit Form skalieren
Align?
|
Re: Objekte dynamisch mit Form skalieren
Zitat:
Verteile ein paar Panel auf deinem Form, ein bisschen mit Align gespielt und schon wirds immer schön skaliert. Die Anchors funktionieren nämlich nicht immer so wie sie sollten. |
Re: Objekte dynamisch mit Form skalieren
Joa nur wenn du unter Zeitdruck in einer dir neuen Programmiersprache entwickelst, verwendest du nicht viel Zeit auf das Finden der Ideallösung für den Resize deiner Form.
Vor allem nicht, wenn dir der händische Weg so klar ist, dass du in runtertippen kannst. Gerade für so Sachen wie "rumprobieren was alle Align einstellungen machen" hat man da wenig Zeit und nerv. Aber deshalb les ich ja parallel in Foren. Wenn da eine Idealere Lösung steht wird sie halt schnell genutzt (wie Anchors *g*). Aber für die Einstellung fixer und unterschiedlicher Columnsizes hab ich bisher noch nichts gelesen so beim gelegentlichen stöbern. Und bisher liefs auch sauber 8) Gerade im Bereich Oberflächen ist mir Delphi noch etwas suspekt...irgendwie anders als alle anderen Programmiersprachen die ich bisher hatte...(Ich sage nur ShowModal :roll: ein absoluter Krampf in Delphi). Nuja Tips + lesen machen klüger, rumprobieren bei so unwichtigen, simpel anders zu lösenden Sachen, macht zuviel Zeitaufwand. Sodele nu aber ins verdiente Wochenende und den Strand geniessen 8) Smk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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