TChar Grid-Beschriftung

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

TChar Grid-Beschriftung

Beitrag von Mathias »

Ich fülle die TSerie von TChar mit sehr kleine Werten (zB 0.000000015), da wird die Grid-Beschriftung mit 2E-8 angezeigt.
Kann man die auch als 0.00000002 haben ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: TChar Grid-Beschriftung

Beitrag von wp_xyz »

Die Achse hat eine Eigenschaft Marks, in der wiederum findest du "Format", das du auf "%0:.8f" setzen könntest - das "f" unterdrückt die Exponentialdarstellung. Allerdings sind Diagramme mit dieser Art von Zahlendarstellung meiner Meinung nach sehr schwer zu lesen. Auch befürchte ich, dass die Beschriftungsroutine bei so kleinen Werten wegen Rundungsfehlern ins Schleudern kommt. Wenn du die Exponentialdarstellung nicht magst, würde ich vorschlagen, die Werte in eine andere Einheit umzurechnen (also z.B. nm oder µm statt m), oder einen konstanten Faktor abzuspalten.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TChar Grid-Beschriftung

Beitrag von Mathias »

die Werte in eine andere Einheit umzurechnen (also z.B. nm oder µm statt m)

Das habe ich geändert, es ist besser so, anstelle von s, hab ich jetzt µs.

Ich wollte mal testen, wie linear, das ein TMemoryStream ist.
Natürlich habe ich die grösse des Stream ein bisschen übertrieben, das PC war fast 10min beschäftigt.

Was ich aber staunte, es gab nur einen Ausreiser, welcher über 30 µs war.

Dazu habe ich folgen Test geschrieben:

Code: Alles auswählen

type
  TMesswert = record
    ma, mm: single;
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Serie: TSerie;
  ms: TMemoryStream;
  za, zn, z: TDateTime;
  i: integer;
  mw:TMesswert;
begin
  Serie := TSerie.Create(Chart1);
  Serie.LinePen.Color := clRed;
  Chart1.AddSeries(Serie);
  ms := TMemoryStream.Create;
  za := Now;
  for i := 0 to 1000 * 1000 * 1000 do begin
    zn := now;
    z := zn - za;
    ms.Write(Pointer(mw), SizeOf(mw));
 
    if z > 0 then begin
      Serie.AddY(z * 1000 * 1000); // in  µs
    end;
    za := zn;
  end;
  ms.SaveToFile('test.dat');
  ms.Free;
end;   
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: TChar Grid-Beschriftung

Beitrag von wp_xyz »

Verwende lieber TLineSeries statt TSerie. "TSerie" ist uralt und ich sollte dieses Grümpel wirklich mal entfernen...

Du kannst eine Series übrigens auch zur Designzeit erzeugen, indem du auf dem Chart doppelklickst. Dann hast du alle Properties übersichtlich im Objekt-Inspektor zur Verfügung.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TChar Grid-Beschriftung

Beitrag von Mathias »

Verwende lieber TLineSeries statt TSerie. "TSerie" ist uralt und ich sollte dieses Grümpel wirklich mal entfernen...

Jetzt weis ich wieso, das du den Code aus dem Wiki entfernt hast.
Dann funktioniert TSeries nur noch aus Kompatibilitätsgründen, und TASeries ist noch älter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten