AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte dynamisch mit Form skalieren

Ein Thema von dopeline · begonnen am 9. Jan 2004 · letzter Beitrag vom 9. Jan 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 16:19
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:
//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 mit den Rundungsfehlern kannste vermutlich weglassen, bei mir musste es nur sehr genau sein.

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)
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 17:48
ä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
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 18:35
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:
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;
woran kann das liegen?

@Smokey wie hast denn deine variablen deklariert?


Gruß, dopeline
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#14

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 18:56
Preisfrage: Was ist die oberste Property im OI für ein StringGrid?
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 19:06
Align?
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#16

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 19:52
Zitat von Smokey:
nuja was gibts da gross zu helfen... ist nur ne Menge Tipparbeit und ein bisserl Rechnerei.
Über width/height top/left lässt sich ja dann alles einstellen in Bezug auf die Grösse des Programmfensters (im Resize-event).

Kannst natürlich auch tools benutzen, die sowas vereinfachen, da gabs hier mal nen Link...aber ich hab die nie ausprobiert.
Brauchst du alles nicht. Viele Kompos besitzen diese nette Property (jupp Align).
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.
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Objekte dynamisch mit Form skalieren

  Alt 9. Jan 2004, 20:39
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 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
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:15 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