ListBox Text hoch/tief Stellen etc
-
hallo zusammen!
ich wollte in einer ListBox funktionsgleichungen ausgeben in "richtiger" schreibweise, also mit hoch/tief stellen usw.
frage ist jetzt nur, wie und ob ich auf die art zu schreiben zugreifen kann. wollte nämlich eigentlich nicht alle funktionen der ListBox selbst programmieren...
-
Hallo,
es geht dir nur darum wie die Einträge aussehen, richtig? Wenn ja, kannst du die Einträge ja vielleicht "selber zeichnen". Nur so als Ansatz.
-
Hallo
ListBox verwendet die algemeinen Windows-Funktionen zur Darstellung von Strings. D.h. Es werden die und nur dir Zeichen des ausgewählten Fonts dargestellt. Alles was nicht in dem Font ist oder mehr als eine Schriftgröße oder vertikale Ausrichtung braucht must du mittels der Draw-Events selber zeichnen.
bis bald
akari
-
aber wenn ich das mache, muss ich auch den rest selbst programmieren, so hab ich mir das gedacht, also auch die übrigen funktionen der listbox und das wollt ich verhindern, weil das schon viel ist nur für das hoch- und tiefstellen!
@ akari: aber das selber zeichnen geht so in der listbox??
-
Nein, die ListBox funktioniert normal weiter - es geht nur darum, dass du die Einträge selber zeichnest. Dabei gehen aber nicht die Funktionen verloren und soweit ich weiß, musst du auch nicht die komplette Box zeichnen, sondern nur die Einträge... Habs aber selbst noch nicht gemacht!
-
Hallo
Richtig mithilfe des Draw-Events must du "nur" die einzelnen Items der Listbox selber zeichnen, nicht die andern Elemente der ListBox.
bis bald
akari
-
dann werd ich das mal probieren! danke sehr!!
-
ich dafür ja den String bearbeiten und hab in der Methode fürs leerzeichen löschen irgendeinen fehler, den ich nich verstehe:
AnsiString a = " "; Funk = Edit1->Text; int b = Funktion.Length(); for(int i=1;i<=b;i++) { if(Funktion[i]==a) { if(i==b){Funktion = Funktion.SetLength(i-1);b = Funktion.Length();} for(int j=i;j<=Funktion.Length();j++)Funktion[j]=Funktion[j+1]; b = Funktion.Length(); } } ListBox1->Items->Add(Funk);
erst hatte ich das:
if(Funktion[i]==" ")
, was Fehler "kann char* nich in char umwandeln" oder so lieferte!
und dann hatte ich vorher
for(int i=1;i<=Funktion.Length();i++)
, was während des programmlaufs einen fehler verursachte"variante des typs string konnte nicht in variante des typs double konvertiert werden"????
hatte das problem schonmal und konnte es mit obiger änderung beheben, aber jetzt gehts nicht...was ist das?
-
was ist das?
Das hab ich mich auch gefragt, wo doch AnsiString eine Methode "Trim" hat, die alle Leerzeichen und Steuerzeichen entfernt.
-
mmh, das ist natürlich eine äußerst nützliche methode, sollte man sich merken...
(wobei ich auch leerzeichen innerhalb entfernen möchte, was die funktion nicht tut)aber das ändert nichts daran, dass ich diese struktur für andere abfragen brauche und der fehler immer auftritt, ob ich nach " " oder nem anderen zeichen frage...
-
Dann nimm doch StringReplace.
eingabe = StringReplace(eingabe," ","",TReplaceFlags() << rfReplaceAll);
-
von welchem Datentyp ist
Funktion[i]
und was schliesst du durch
" "
ein ?
-
zu 1. AnsiString, sorry steht in der h-datei
zu 2. ein leerzeichen aber dann später auch noch andere Zeichen, die zur funktionsbearbeitung wichtig sind: =, (), ^, e, ln, sin .........
@ trimmer danke sehr funktioniert gut!!
aber die schleife wirft immer noch die exception...
-
naja in Funktion kann nie soetwas wie (), ln, sin stehn, da es sich hier um einen einzelnen Char handelt und nicht um einen AnsiString, die Variable Funktion ist ein Ansistring
deshalb kann
if(Funktion[ i]==a)
nicht funktionieren, da er hier einen Char und nicht einen String erwartet, es geht nur so
if(Funktion[ i]==' ') //fragt z.B. nach Leerzeichen
um nach ganzen Stringteilen zu suchen kann man Pos verwenden
-
@linnea ja ich weiß, so wie du es sagst hatte ich es ja, aber da kommt einmal die debugger meldung char in char* umwandeln geht nicht und mit
AnsiString a = " "; if(Funktion==a)
kam dann die meldung während des laufenden! programms, was ich schon komisch fand!
-
hoo, da fällt mir auf: ich hatte anführungszeichen in der abfrage verwendet, das ist natürlich dumm, hätten einfache sein müssen ' '!!! sorry