AGB  ·  Datenschutz  ·  Impressum  







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

TEdit über einem Dezimalpunkt zentrieren

Ein Thema von messie · begonnen am 26. Feb 2006 · letzter Beitrag vom 28. Feb 2006
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

TEdit über einem Dezimalpunkt zentrieren

  Alt 26. Feb 2006, 18:46
Hallo,

wir hatten schon häufiger das Thema wie man bei einem TEdit eine property alignment einführt. Ich würde nun gerne ein aus TEdit abgeleitetes Control für die Darstellung von Zahlen erstellen, bei dem immer der Dezimalpunkt unabhängig von der Zahl und ihrer Formatierung an derselben Stelle gezeichnet wird. Damit ließen sich Zahlen in Edits übereinander übersichtlich darstellen.
Wo gibt es sowas (wenn nicht, wie dreht man sich das hin)?

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von tripleeye
tripleeye

Registriert seit: 13. Apr 2005
Ort: Stralsund
20 Beiträge
 
Delphi 2005 Personal
 
#2

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 27. Feb 2006, 14:59
Du könntest den Textfeldern eine feste Länge zuordnen (z.b. 10). Dann legst du fest an welcher Stelle der Dezimalpunkt sein soll (z.b. 8). jetzt bearbeites du die zahl (z.b. 7.9) beim OnExit. Die Zahl bekommt dann vorn 6 Leerzeichen und hinten eine 0 angefügt.
Murphys Gesetz:
Wenn etwas schief gehen kann, dann wird es auch schief gehen.
Erste digitale Ableitung:
Murphys Gesetz wird durch Computer optimiert.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 27. Feb 2006, 17:58
Das funzt aber nur wenn die Schrift nichtproportional ist. Das kann ich nicht sicherstellen. Ich hatte gehofft, daß man ein canvas.draw oder ähnlich zugänglich machen könnte und daraus eine property für den Dezimalpunkt transparent machen könnte. Ich würde dann versuchen, die Position des Dezimaltrennzeichens herauszufinden und den Text mit dem daraus errechneten Offset zu platzieren.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 27. Feb 2006, 18:09
die einfachste möglichkeit ist tatsächlich eine Schriftart wie Courier New zu nehmen...dann kannst du alles über die Position des Kommas im String machen.

Anders geht es zwar, aber das schöne "übereinander stehen" ist dann in jedem Fall futsch.


da müsstest du dann die zahl in den vor und nachkommateil zerlegen und am komma ausgerichtet auf's Canvas malen.
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 27. Feb 2006, 19:43
Zitat von glkgereon:
da müsstest du dann die zahl in den vor und nachkommateil zerlegen und am komma ausgerichtet auf's Canvas malen.
ja, genau!
Ich suche nach dem Ansatz, wie ich einer aus TntEdit abgeleiteten Komponente das als property verpassen kann. Ich bin da für jede Hilfe dankbar, zumal ich das auch auf den Builder umsetzen muß.

Grüße, Messie
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 28. Feb 2006, 03:13
Sollte m.E. auch mit "Arial" gehen - die Ziffern entsprechen jeweils zwei Leerzeichen. Einfacher wäre es aber, die Zahl der Nachkommastellen festzulegen und mit Nullen aufzufüllen. Wenn dann der Text rechtsbündig ausgerichtet wird, stehen die Zahlen schön geordnet untereinander.

Delphi-Quellcode:
2.001,050
  100,375
   20,300
Sieht auch schöner aus, als wenn man rechts mit Leerzeichen auffüllt.

Delphi-Quellcode:
2.001,05
  100,375
   20,3
(Ist natürlich kein Delphi-Code - habe ich nur wegen der Darstellung verwendet)

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#7

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 28. Feb 2006, 06:17
Das mit den zwei Leerzeichen klappt solange, bis zwei oder mehr Einsen nebeneinanderstehen. Dann bräuchte man nach jeder Eins etwa ein viertel Leerzeichen... Ich hab' es im Anhang mal gezeigt, jeweils 6 Vor- und vier Nachkommastellen. Deshalb brauche ich wohl noch eine andere Lösung.

Grüße, Messie
Miniaturansicht angehängter Grafiken
dezimal_426.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#8

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 28. Feb 2006, 06:25
Hi,

nehmt doch mein calcEdit, da lassen sich die Anzahl der Kommastellen und Darstellung mit Tausenderpunkt einstellen.

Mfg

BrunoT

Meine Calcedit-Kompo :
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Zottel
(Gast)

n/a Beiträge
 
#9

Re: TEdit über einem Dezimalpunkt zentrieren

  Alt 28. Feb 2006, 09:06
Hi Messie!

Nimm die Breite des textes bis zum Mittelpunkt des Punktes.
also (Textbreite bis punkt) + (halbe punktbreite)

dann denk dir eine position aus, wo der punkt immer stehen soll, also z.b. an Y=100 ;

dieses Y-Textbreite und dann aufs canvas schreiben.
hmmm.. war warcheinlich nicht so super beschrieben. Vielleicht hilft der codeschnipsel weiter. hab das ganze an einer Listbox ausprobiert.

Delphi-Quellcode:
procedure TForm1.LBDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  iPunktMittel:Integer;
  iBreiteBisPunktMittel:Integer;
  iPunktSollPosition:Integer;
begin
  iPunktMittel:=LB.Canvas.TextWidth(copy(lb.Items[index],1,pos('.',lb.Items[index])))
               -LB.Canvas.TextWidth(copy(lb.Items[index],1,pos('.',lb.Items[index])-1));
  iBreiteBisPunktMittel:=LB.Canvas.TextWidth(copy(lb.Items[index],1,pos('.',lb.Items[index])-1))+trunc(iPunktMittel/2);
  iPunktSollPosition:=100;
  LB.Canvas.TextOut(iPunktSollPosition-iBreiteBisPunktMittel,Rect.Top,lb.Items[index]);
end;
vielleicht hilfts

//Edit: formatierung geändert
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:38 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