Autor Beitrag
Major
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 01.07.02 19:17 
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
ausblenden Quelltext
1:
ComboBox1.SetFocus					

Wenn du den im Editfeld enthaltenden Text Selektieren willst ohne die Box Aktiv zu machen sieht das so aus:
ausblenden Quelltext
1:
ComboBox1.SelectAll;					


Wenn du was anderes willst melde dich noch einmal.

Gruß
Klabautermann
Major Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:
ausblenden 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
mathias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58
Erhaltene Danke: 3



BeitragVerfasst: Mo 01.07.02 21:24 
In diesen FAQ Beitrag hat es auch sowas ähnliches.
www.auq.de/viewtopic.php?t=147 :)
Major Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 10:44 
Hi,

dan bin ich überfragt.
Ich habe dir mal ein [url=www.oitmann.de/prob/...eispielprojekt[/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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 14:00 
Hallo noch einmal,

Dann musst du im grunde nur die Zeile
ausblenden 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:
ausblenden 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
ausblenden Quelltext
1:
IF Index = 2 THEN					


Gruß
Klabautermann
Major Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 02.07.02 18:42 
@Klabautermann
die Firma dankt