09. juni 2001 - 20:25Der er
21 kommentarer og 1 løsning
StringGrids kan ikke opføre sig ordentligt
Jeg har flere StringGrids i mit program, og under WIN2000 ser de ud som de skal. Hvis programmet derimod køres under W98-ME, så er det som at cellerne \"udvider\" sig, således at der kommer scrollbars frem. Det ser mildest talt ikke særlig godt ud, og er ret irriterende. :(
Jeg har en idé om at det har noget at gøre med en evt. forskel på den font som OS\'et bruger, men hva\' dælen kan jeg gøre for at undgå problemet.
Løsningen (der må være en!!)skal helst være ret enkel, da det ellers vil knibe med at få tid til at gøre noget ved problemet.
Jeg bruger den font som Delphi selv har valgt, der har jeg ikke pillet ved noget.(MS Sans Serif, regular, 8)
\"Store fonte\" var også mit første gæt, men det er ikke der problemet ligger, da han kører med \"small fonts\" (standard).
Det underlige er at problemet kun er der under W98-ME, og ikke under WIN2k. Dette gælder både på min maskine og den anden. Det er som W98-ME bruger en anden og større font end WIN2000.
Når jeg bruger ovenstående font i Delphi, er det så denne font der benyttes på den maskine som programmet køres på, (under forudsætning af at den er installeret på maskinen), eller bruger programmet en eller anden \"default\" font som styresystemet specificerer?
Det er i StringGrid\'ene der kommer scrollbars. Det er som om cellerne bliver større under W9x, og den eneste årsag jeg umiddelbart kan se til dette er, at der måske er forskel på den font som systemet bruger. Er (MS Sans Serif, Regular, 8) ikke en normal default font eller hvad?
Jeg vil helst undgå at folk skal til at rode med scrollbars, for at kunne smide værdier i stringgrids\'ene.
Det kan jeg selvfølgelig undgå ved at slå scrollbars fra, men så kan der være en hel række i stringgrid\'et der ikke kan ses.
Nu ved jeg ikke om det kun er dig der har set mit spørgsmål, men det skulle da undre mig, hvis det kun er mig der har rendt ind i dette problem. Det kunne være spændende at høre hvad andre evt. har gjort for at undgå/løse det.
Det gør ingen forskel hvilken opløsning skærmene kører i. Jeg har to monitorer på min PC, hvor den ene kører 1152x864 og den anden kører 1024x768. Jeg har også prøvet 800x600.
Der er to måder, som jeg har prøvet, hvor jeg får problemet, og det er hvis jeg sætter systemet til at bruge \"Large fonts\", eller hvis jeg kører programmet under W9x.
- Jeg har prøvet at lægge nogle screenshots ud, som i kan se... Håber jeg... Jeg har ikke prøvet at oprette en webserver før !!!
Jeg tror nu stadig det er et eller andet selvforskyldt, de to første stod jo godt nok, prøv evt. at lave dem 1 pixel bedre og højre, hvis du først får en scrollbar på udløser det den anden, du kan også prøve at sætte din FormStyle til en dialog.
Nu har jeg fundet en måde at løse det på !!! Jeg forstår stadig ikke, hvad der går galt... Whatever!!!!
Jeg har lavet rammen der omgiver cellerne meget for stor, givet SG\'et en baggrundsfarve der svarer til den PageControl det ligger på, og herefter har jeg farvet de enkelte celler, som jeg gerne vil have dem.
procedure TForm1.sgMomentsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var cellColor : TColor; begin with sgMoments do begin case ACol of 0: CellColor := clSilver; 1,2,3,4 : Begin if (ARow >= 1)and (ARow <= 14) then cellColor := clWhite else cellColor := clSilver; end; end; Canvas.Brush.Color := cellColor; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2,Rect.Top+2,Cells[ACol,ARow]); end; end;
En lidt træls og bøvlet løsning, men det virker :)
Jan >> Er det for mange Rækker eller Coloner du får, det ser lidt ud på koden som om det er rækker, så når sg\'en sætter en scrollbar i siden får du også en forneden, men det kan du jo overveje at slå fra med Proprtyen ScrollBars, sæt den evt. ssVertical så får du scrollbar i siden, altid og kan så designtime tilpasse breden, du kan også overveje at lave noget autosize-logik, men det er lidt langhåret at få til at virke ordenligt.
Jeg får ikke for mange rækker og kolonner, der er det rigtige antal, det er bare som om cellerne bliver hhv. bredere OG højere ???
Jeg synes at det ser ud som om der er forskel på den font der anvendes i de to OS\'er. Har StringGrids mon en eller anden indbygget funktion, der gør at de tilpasser sig den systemfont der anvendes? Er der nogen der ved, hvad font hhv. W9x og W2k bruger.
Jeg har prøvet at slå scrollbars fra, men så sker der bare det at cellerne stadig \"udvider\" sig, og der er dermed en række som ligger delvist uden for det synlige område. Man kan dog stadig få adgang til cellen ved at bevæge sig ned til den vha. piletasterne.
Det kan godt være at det er et font problem, med delphi gør ikke noget, windows gør noget hvis du bruger en font der ikke er i W9x, det kunne jo også være du havde fået sat din font size til noget andet, eller ??, det er ihvert fald ikke stringgrid\'en der gør noget, for så ville den gøre noget på alle siderne, og det gør den jo ikke kan jeg se. Du kan evt. lægge koden pakket uden exe. samme sted som pic. så henter jeg det ned og kigger på det.
Hej Jan, jeg kan ikke se noget der kan forklare dit problem, men jeg kan se på dine skærm dump at det ikke er alle dine grids der har et problem, så jeg tror det ligger på den w9x du tester på, dens skærm drv. eller lign, men prøv at smid en knap på din main form, nede i bunden, og lav en onclick event på den hvor du sætter denne kode ind, så kan du ved selvsyn se at dine grid colwidths ikke er forskellige i win2000/W9x
// Tilføjet til test formål !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
function MakeGridString( Sg : TStringGrid ) : String; VAR Cnt : Integer; begin Result := \'\'; for Cnt := 0 to Sg.ColCount-1 do begin Result := Result + Format(\'No - Width : %d %d\',[Cnt,Sg.ColWidths[Cnt]])+#10#13; end; end;
// !!! OnClick Event !!!!!
procedure TForm1.Button1Click(Sender: TObject); VAR Strx : String; begin Strx := \'\'; case PageControl1.ActivePageIndex of 0 : begin Strx := MakeGridString(sgDimensions1); Strx := Strx + MakeGridString(sgDimensions2); end; 1 : begin Strx := MakeGridString(sgMaterials); end; 2 : begin Strx := MakeGridString(sgLoads); Strx := Strx + MakeGridString(sgMoments); end; 3 : begin Strx := MakeGridString(sgAddCond); end; end; ShowMessage(Strx); end; // Tilføjet til test formål !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/Martin PS. Kender du forresten de folk i havde ansat i KBH. i engang
Nej, jeg kender kun til ham, jeg har som kontaktmand. Jeg er kommet i forbindelse med firmaet via min vejleder på AUE, som fortalte at de havde et problem, de godt kunne tænke sig at få en studerende til at kigge på.
NB. AUE står for.... hold fast: Aalborg Universitet Esbjerg... Kulret navn, ik\'? :)
Bortset fra det, så har jeg ikke glemt din kode, men jeg sidder og skal have afsluttet noget regneri, som jeg er nødt til at have klar til i morgen tidlig. Lige så snart jeg har fået styr på det, så får jeg kigget på Delphi halløj\'et.
Hold ...., hvor gik der kage i det her halløj. (ikke i programmet, men i det andet jeg havde gang i).
Nu er projektet lykkeligt overstået, og jeg kan fortælle at jeg, takket være din og andres hjælp her på Eksperten, fik et flot 11-tal for mit projekt. :-D
Nu har jeg så en del andre ting jeg lige skal have styr på, og så vil jeg sågu ha\' fundet ud af hvad problemet helt præcist er med de stringgrids.
PS Blot en lille reminder om at jeg ikke har glemt dig..... ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.