Donnerstag, 20. Oktober 2011

Ubuntu 11.10 kann nicht heruntergefahren werden

Nach der Aktualisierung von Ubuntu 11.04 auf 11.10 gab es einige Unstimmigkeiten auf meinem System. Zwei besonders auffallende Dinge waren, dass erstens das Menü zum Herunterfahren des Systems nicht mehr zur Verfügung stand (der Startknopf in der Systemleiste war verschwunden) und zweitens zahlreiche Piktogramme fehlten. Die Lösung war aber einfach:
  1. In der Systemleiste den Benutzer anklicken.
  2. »Benutzerkonten …« auswählen.
  3. »Alle Einstellungen« anklicken. Diese ersten drei Schritte waren nur ein Umweg, um an das Einstellungsmenü zu kommen, das ja fehlt, wenn der Startknopf nicht vorhanden ist.
  4. »Darstellung« anwählen.
  5. Das Thema einmal wechseln, zum Beispiel von Ambiance auf Radiance. Und wieder zurück. Jetzt sollte schon der Startknopf erscheinen, einige der fehlenden Piktogramme sind nach dieser Operation auch vorhanden.
  6. Neustart des Rechners. Nun finden auch die restlichen Piktogramme den Weg auf die Oberfläche. Eventuell reicht auch ein Neuanmelden.
Der Trick ist also im Wesentlichen der, dass man einmal das Oberflächenthema zum Neuladen zwingt.

Dienstag, 24. Mai 2011

FPC: Auffüllen einer Zahl mit Nullen

Bei der Umwandlung von Ganzzahlen in Zeichenketten wird manchmal gewünscht, dass nach links bis zu einer bestimmten Länge mit Nullen aufgefüllt wird. Das lässt sich in Free Pascal mit der Funktion AddChar aus den StrUtils lösen. Ein Beispiel:

AddChar('0', IntToStr(123), 12)

Dieser Aufruf hätte die Zeichenkette »000000000123« zum Ergebnis. Man gibt also das Zeichen, mit dem aufgefüllt werden soll, an, dann die Zeichenkette, dann die gewünschte Länge.

Mittwoch, 11. Mai 2011

FPC: Ungenauigkeiten bei MinutesBetween

MinutesBetween (aus DateUtils) liefert manchmal ein Ergebnis, das um 1 vom erwarteten Ergebnis abweicht. So kann der Unterschied zwischen zwei TDateTime-Werten, die genau eine Minute auseinanderliegen, von der Funktion auch mal mit 0 angegeben werden. Der Grund dafür liegt in der üblichen Ungenauigkeit von Fließkommaoperationen.

Genauer ist nach meinen Erfahrungen in der Regel folgende Konstruktion:

Round(MinuteSpan(t1, t2))

Dabei sind t1 und t2 eben zwei TDateTime-Werte. Hier ist allerdings der aktuelle Rundungsmodus zu beachten, der von Round benutzt wird.

Mittwoch, 6. April 2011

Formatierung von Fließkommazahlen

Allgemein bekannt dürfte sein, dass Fließkommazahlen bei der Ausgabe mit Write(Ln) durch Angabe von Feldbreite und Anzahl der Nachkommastellen formatiert werden können. Diese Angaben werden mit Doppelpunkten an den auszugebenden Wert angehängt. Zum Beispiel liefert

WriteLn(1.234:4:2);

die Ausgabe 1.23. Das Ausgabefeld ist dabei vier Zeichen breit, die Anzahl der Nachkommastellen 2.
Möchte man den gleichen Mechanismus nun nicht direkt für die Ausgabe verwenden, sondern das Ergebnis als Zeichenkette haben, so lässt sich das auch bewerkstelligen. Hierzu verwendet man die Str-Prozedur. Wenn s eine String-Variable ist, so lässt sich darin die formatierte Zahl so abspeichern:

Str(1.234:4:2, s);