Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - ComboBox(itemIndex-Farbe)
Major - Mo 01.07.02 19:17
Titel: ComboBox(itemIndex-Farbe)
hi!!!
ich bin neu hier und ein Anfänger was Delphi angeht
so nun zu meinem Problem ich möchte einen ItemIndex
in der ComboBox, der wärend der Laufzeit definiert wird,
farblich hervorheben
wie geht das???
gruß an alle
Major
Klabautermann - Mo 01.07.02 19:26
Willkommen,
ich bin nicht sicher was du meinst?
Wenn du willst, das die Combobox nachdem du einen ItemIndex gesetzt hast zum Aktiven Element wird dann füge diese Ueile ein:
Wenn du den im Editfeld enthaltenden Text Selektieren willst ohne die Box Aktiv zu machen sieht das so aus:
Wenn du was anderes willst melde dich noch einmal.
Gruß
Klabautermann
Major - Mo 01.07.02 20:07
sorry hab mich wohl etwas verdrigst ausgekehrt
also ich mach einfach mal ein Beispiel
die Combobox bekommt fünf Zahlen zugewiesen
5
4
3 (die zahl soll in eine andere Farbe z.b rot haben)
2
1
bis dann
Major
Klabautermann - Mo 01.07.02 20:25
Achso,
na da fängs du ja gleich mit dem Richtigen Kaliber an ;).
Die Combobox kann soetwas nicht von alleine. Glücklicherweise erlaubt sie dir, ihr die Arbeit abzunehmen.
Dazu must du die Eigenschaft
Style auf
csOwnerDrawFixed stellen. Dann fügst du im Ereignis
OnDrawItem folgenden Code ein:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); VAR aCB : tComboBox; begin IF (Control IS tComboBox) THEN BEGIN aCB := tComboBox(Control); IF aCB.Items[Index] = '3' THEN aCB.Canvas.Font.Color := clRED ELSE aCB.Canvas.Font.Color := clBlack; aCb.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, aCB.Items[Index]); END; end; |
und es sollte Klappen ;).
Wenn du Fragen hast, dann weißt du ja wo du sie stellen kannst (aber erst in die Online-Hilfe gucken :shock: )
Gruß
Klabautermann
Major - Di 02.07.02 08:42
hi!!!
dank dir erst mal für die schnelle Antwort, ich hab’s genauso gemacht, aber so wie ich das sehen kann bewirkt es nur eine Veränderung
der Farbdarstellung, wenn der Markierungsbalken darüber steht.
Tino - Di 02.07.02 09:03
Major hat folgendes geschrieben: |
aber so wie ich das sehen kann bewirkt es nur eine Veränderung der Farbdarstellung, wenn der Markierungsbalken darüber steht. |
Und ? :roll:
Klabautermann - Di 02.07.02 09:39
Hast du Style auf csOwnerDrawFixed stehen?
Bei mir klappt es nämlich. Oder beziehst du dich auf das FAQ?
Gruß
Klabautermann
Major - Di 02.07.02 10:27
hallo
ja, Style steht auf csOwnerDrawFixed
kann es daran liegen:
die Items werden erst wärend der Laufzeit erstellt
und das geschiet in der Unit1, die ComboBox ist
aber in der Unit2 ??
Gruß
Major
Klabautermann - Di 02.07.02 10:44
Hi,
dan bin ich überfragt.
Ich habe dir mal ein [url=
http://www.oitmann.de/prob/BuntCombo.zip]Beispielprojekt[/url] ins Netzt gespielt.
Gucke dir bitte zuerst an wie sich die EXE verhält, und dann ob sich das verhalten nach neucompilieren änder (wegen unterschiedlicher DELPHI Version). Wenn es so bleibt kann dir das ganze als Experimeniergrundlage dienen. Denn ich wüsste nicht wodran es liegen könnte.
Gruß
Klabautermann
Major - Di 02.07.02 11:22
ich schau mir das gleich mal an
du hast recht, dein beispiel funktioniert wenn
ich über die Eigenschaft Items welche hinzufüge
also Items "statisch" vorhanden sind, daß ist bei
meinem Projekt aber nicht der Fall weil sie "dynamisch" sind
naja, ich dank dir für deine Gedult und hoffe das ich
mit deinem Projektbeispiel weiterkomme
bis dann
Major
Major - Di 02.07.02 12:55
@Klabautermann
man bin ich blööööd du hast natürlich die richtige Antwort zu meiner
falschen Frage gegeben sorry,
ich muß mein Beispiel abändern das ganze ist doch komplizierter als ich
dachte...
so, und jetzt die neue Frage
1. es findet eine Berechnung statt
2. das Ergebnis der Berchnung lass ich vergleichen mit diesem array
Quelltext
1: 2:
| kv1: array[1..23]of real=(0.025,0.04,0.063,0.1,0.25,0.4,0.63,1.0,1.6, 2.5,4.0,6.3,10.0,16,25.0,40.0,63.0,100.0,160,250.0,360,400.0,630.0); |
3. die Berechnung und Wahl des wertes der rot hervorgehoben werden soll
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| kvs:= (mar/1000)*sqrt(1/p1); indexko:= 24; sk:= 0;
for ik:= 1 to 23 do begin if kvs = kv1[ik] then sk:= ik; end;
for ik:= 23 downto 1 do begin if kvs < kv1[ik] then indexko:= ik; end;
if sk > 0 then begin kvs1:= kv1[sk]; end;
if sk = 0 then begin kvs1:= kv1[indexko]; end;
Form2.combobox1.Items.Add(formatfloat('0.000',kvs1)); |
z.b. Ergebnis der Berechnung=0.063
dann steht in die Combobox kommt nun 0.063
ist das Ergebnis = 0.05 dann steht in der Combobox der nächst höhere
Wert in dem Fall auch 0.063 so der Wert(kvs1), der aus der Berechnung zugewiesen wird, soll nun immer eine Rote Farbe haben
4. zuzüglich stehen in der Combobox noch die beiden nächst größeren
werte aus dem array und die beiden nächst kleineren werte(wenn es welche gibt)
das funktioniert auch alles, wie gesagt ich möchte jetzt farblich den Wert
aus Punkt 3. hervorheben lassen
jo, das ist nun mein Problem
Gruß
Major
Code-Tags hinzugefügt. Tino
Klabautermann - Di 02.07.02 14:00
Hallo noch einmal,
Dann musst du im grunde nur die Zeile
Quelltext
1:
| IF aCB.Items[Index] = '3' THEN |
aus meinem Beispiel ensprechend anpassen.
Du füllst die Werte ja sicherlich ähnlich wie der Knopf in meinem Beispiel in die Combo Box, nur das die Inhalte etwas komplizierter ermittelt werden.
Du hast sicherlich auch eine Funktion die dir den Wert ermittelt, welcher hervorgehoben werden muss.
Das ganze musst du dann urnoch richtig zusammenbauen. Ungefer so:
Quelltext
1:
| IF aCB.Items[Index] = FloatToStr(BerechneWert) THEN |
Ein wenig hört sich das bei dir so an als sollte immer der 3te Wert in der List markiert werden. In dem Fall währe die Bedingund natürlich sehr einfach
Gruß
Klabautermann
Major - Di 02.07.02 18:42
@Klabautermann
die Firma dankt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!