aCol=0 (erste Zeile) Font ist anders

Rund um die LCL und andere Komponenten
Antworten
jeanP
Beiträge: 21
Registriert: Mo 1. Feb 2016, 07:48

aCol=0 (erste Zeile) Font ist anders

Beitrag von jeanP »

Hallo,

vielleicht habe ich irgendwie ne Blockade.
Ich habe im StringGrid Font.Name auf 'Courier New' gesetzt (ich brauche die gleiche Pixelbreite für die Schriftart).
FixedCols and FixedRows brauche ich nicht; habe sie daher auf 0 gesetzt. Jedoch wird im StringGrid aCol=0 mit der Defaultschriftart angezeigt.

So ein ähnlichen Fall hatte ich auch schon mit dem TreeView. Da wurde der Root-Eintrag auch in Default dargestellt, obwohl in diesem Fall eine andere Schriftgröße gewählt wurde.
Die Anzeige in den restlichen Zeilen passt.

Hat jemand eine Idee, warum das so ist. Habe ich vergessen, irgendeine Option zu setzen? Hatte eigentlich schon alles ausprobiert. :|

Danke schon mal im Voraus.

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von wp_xyz »

Kannst du das als Miniprojekt posten? Ich kann das nämlich nicht bestätigen (siehe Anhang). Und welche Lazarus/FPC-Version/Betriebssystem verwendest du?
Dateianhänge
Grid_Courier.zip
(1.93 KiB) 64-mal heruntergeladen

jeanP
Beiträge: 21
Registriert: Mo 1. Feb 2016, 07:48

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von jeanP »

Ich arbeite auf Win10 mit Lazarus 1.4.4.
Habe mal eine Testversion angehängt. Im Zip-Ordner ist auch ein Textfile dabei.
scTest.png
Test.zip
(1.08 MiB) 64-mal heruntergeladen

jeanP
Beiträge: 21
Registriert: Mo 1. Feb 2016, 07:48

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von jeanP »

Ich vergaß zu erwähnen, dass die Daten im Stringgrid aus einer Stringlist geholt werden. Diese wird wiederum mit einem Dateiinhalt (Textfile) gefüllt.

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von wp_xyz »

Auf Win7 sehe ich das Problem nachwievor nicht. Bin dann auf das Notebook mit Win10 gewechselt, und siehe da, da war dein Bug. Seltsamerweise aber nur mit deiner Datei, eine selbsterstellte Datei zeigte das Problem nicht. Dann sah ich in Notepad++, dass deine Datei einen BOM hat ---> als UTF-8 ohne BOM gespeichert, und der Fehler ist weg. Die eingebaute LoadFromCSVFile berücksichtigt den BOM automatisch. Alternativ kannst du natürlich den BOM auch nach dem Einlesen wegmachen:

Code: Alles auswählen

uses lconvencoding;   // <--- neu
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  sl:TStringList;
  i:integer;
  s: String;
begin
  if openDialog1.Execute then begin
    try
      sl:=TStringList.Create;
      sl.LoadFromFile(OpenDialog1.FileName);
      s := sl.Text;                                                // <--- neu
      sl.Text := ConvertEncoding(GuessEncoding(s), encodingUTF8);  // <--- neu
 
      if sl.Count>0 then begin
        stringGrid1.Clear;
        stringgrid1.RowCount:=sl.Count;
        for i:=0 to stringgrid1.RowCount-1 do begin
          stringgrid1.Cells[0,i]:=sl.Strings[i];
        end;
      end;
    finally
      sl.Free;
    end;
  end;
end;

jeanP
Beiträge: 21
Registriert: Mo 1. Feb 2016, 07:48

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von jeanP »

Hallo wp_xyz,

danke für deine Hilfe.
Da hätte ich nun gar nicht danach gesucht.

Dein Vorschlag, den BOM selbst herauszunehmen, finde ich gut, da ich nicht sichergehen kann, ob mir solche Textdateien noch öfters begegnen.
Ich habe die Konvertierung mal eingebunden, wie in deinem Beispiel. Jedoch wird ein weiterer Parameter verlangt.

ConvertEncoding(const s, FromEncoding, ToEncoding: string);

Wie wäre denn der korrekte Eintrag für Konvertierung? Komme anscheinend nicht klar damit.
Das Ergebnis sieht dann so aus. :cry:
scTest1.png
scTest1.png (2.27 KiB) 1431 mal betrachtet

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von wp_xyz »

Code: Alles auswählen

  sl.Text := ConvertEncoding(s, GuessEncoding(s), encodingUTF8);  
Statt "GuessEncoding" kannst du in diesem speziellen Fall auch "encodingUTF8BOM" schreiben, weil du weißt, dass ein BOM vorhanden ist. Ansonsten ist GuessEncoding etwas allgemeiner, aber auch nicht 100% sicher bei ANSI-Kodierungen.

jeanP
Beiträge: 21
Registriert: Mo 1. Feb 2016, 07:48

Re: aCol=0 (erste Zeile) Font ist anders

Beitrag von jeanP »

Vielen Dank,

mit dieser Sache werde ich mich dann in den kommenden Tagen (oder Wochen) auf jeden Fall näher beschäftigen.
Tolle Hilfe. :D

LG

Antworten