Autor |
Beitrag |
andisun
      
Beiträge: 61
Win 98, Win Xp
D5 Stan, D7 Ent
|
Verfasst: So 09.03.03 22:45
Also mein Problem ist bestimmt ganz einfach zu lösen...
Ich möchte gerne in einer Combobox mehrere Items haben, die alle dem Muster: "Name | Wert" entsprechen, also Combobox1.Text:='Name | Wert'
Nun befindet sich auf meinem Formular noch ein Edit-Feld, wenn der Benutzer jetzt einen Eintrag in der Combobox auswählt, dann soll im Edit-Feld der Wert stehen... Aber in der Combobox nur der Name , also Combobox1.text='Name'...
Doch wenn ich bei OnSelect folgendes schreibe:
Quelltext 1: 2:
| Edit1.text:='Wert'; Combobox1.text:='Name'; |
schreibt das Program trotzdem "Name | Wert" in das Feld...
Logischer weise weil wahrscheinlich erst nach dem ereigniss OnSelect der Combobox1.text wert geändert wird... aber wie soll ich den den dan noch manipulieren???
Ich denke irgendjemand hat sowasschon gemacht, auch wenn es eigentlich unsinnig ist sich an sowas aufzuhalten, anstatt es mit einem weiterem editfeld zu lösen, aber es müsste doch auch so gehen, oder?
Moderiert von Tino: Code-Tags hinzugefügt.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 10.03.03 09:21
Hallo
alles in allem verstehe ich ein wenig Bahnhof. werd nicht ganz schlau draus, was du vorhast.
onselect kennt mein D5 hier noch nicht.
suchst du sowas hier, um deine Strings aufzuteilen?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.ComboBox1Change(Sender: TObject); var i:integer; s:string; begin s:=ComboBox1.Items[ComboBox1.itemindex]; i:=pos('|',s); // | im string suchen // ComboBox1.text := copy(s,1,i-1); wird nicht gehen, hier könnte dir aber das selberzeichnen weiterhelfen //den string aufsplitten edit2.text := copy(s,1,i-1); edit1.text:= copy(s,i+1,length(s)-i); end; |
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
andisun 
      
Beiträge: 61
Win 98, Win Xp
D5 Stan, D7 Ent
|
Verfasst: Mo 10.03.03 17:47
stimmt ich hätte vileicht dabei schreiben sollen, das es sich um delphi 6 handelt, bei d5 gibts das ereigniss tatsächlich nciht...
und für die nicht benutzten Codetags muss ich mcih auch entshculdigen, danke tino
dein Code verdeutlicht genau mein problem:
ich möchte den text der jetzt in edit1 steht gerne in der combobox stehen haben...
wie darf ich das mit dem selber zeichnen verstehen?
da fehlt mir dann doch auch der zeitpunkt an dem das ganze ablaufen soll...
oder gibt es ein ereigniss, was aufgreufen wird, sobald der benutzer einen neuen eintrag ausgewählt hat , und der text schon ins combobox geschrieben wurde... damit ich den dann einfach zuweisen kann...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 10.03.03 17:59
Hi!
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin if not combobox1.droppeddown then ComboBox1.Canvas.TextOut(rect.Left,rect.top,edit1.text) else begin ComboBox1.Canvas.FillRect(rect); ComboBox1.Canvas.TextOut(rect.Left,rect.Top,ComboBox1.Items[index]); end; end; |
So könntest Du es machen! Du musst den Style der ComboBox auf "csOwnerDrawFixed" setzen.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 10.03.03 18:06
Hallo
ok, mal kurz hingesetzt:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Style:=csOwnerDrawFixed; //!!!wichtig //teststrings ComboBox1.items.add('Name1|Wert1'); ComboBox1.items.add('Name2|Wert2'); ComboBox1.items.add('Name3|Wert3'); ComboBox1.items.add('Name4|Wert4'); ComboBox1.items.add('Name5|Wert5'); end;
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var s,sname,swert:string; i:integer; //hab jetzt mal n paar Variablen verwendet, damit es etwas übersichtlicher wird. begin with control as TComboBox do begin //hintergrund zeichnen //wenn selektiert, dann andere farbe if odselected in State then Canvas.brush.color:=clHighlight else Canvas.brush.color:=color; Canvas.fillrect(rect);
//text ausgeben s:=items[index]; i:=pos('|',s); // | im string suchen //den string aufsplitten sname := copy(s,1,i-1); swert := copy(s,i+1,length(s)-i); //der Text im Eingabe feld wird gezeichtnet if odComboBoxEdit in State then begin //nur wert ausgeben canvas.textout(rect.Left+1,Rect.top+1,swert); end else begin //der Text der Liste wird gezeichnet -> alles ausgeben //du könntest die sache hier noch ausbauen, zb den Namen immer fett und den Wert immer normal schreiben usw. canvas.textout(rect.Left+1,Rect.top+1,s); end; end; end; |
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 10.03.03 18:10
grummel, wieder zu langsam...
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 10.03.03 18:12
Dafür aber länger!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 10.03.03 18:17
Zitat: | Dafür aber länger! |
was glaubst du denn, was ich in derZeit gemacht habe
ich würd aber trotzdem den String bei Drawitem aufsplitten, mir gefällt es nicht, diesen vom Edit zu holen.
frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 10.03.03 18:19
Zitat: | ich würd aber trotzdem den String bei Drawitem aufsplitten, mir gefällt es nicht, diesen vom Edit zu holen. |
Ja, auf jeden Fall. Ich wollte nur das Prinzip zeigen, alles andere würde ja in soviel Arbeit ausarten, wie Du Dir gemacht hast! 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Mo 10.03.03 18:22
das splitten hat ich ja schon, konnte strg+C und strG+V drücken 
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
andisun 
      
Beiträge: 61
Win 98, Win Xp
D5 Stan, D7 Ent
|
Verfasst: Di 11.03.03 15:00
ich hab greade nicht alzu viel zeit, aber erstmal dankeschön, das ihr euch sogar zu zweit hingesetzt habt und mir ne Lösung präsentiert... *g
aber ich möchte gerne in der ComboBox noch manuelle Eingaben zulassen, somit scheidet csOwnerDrawFixed doch aus oder?
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Di 11.03.03 15:37
Hallo
Zitat: |
aber ich möchte gerne in der ComboBox noch manuelle Eingaben zulassen
|
ich seh immer noch nicht ganz durch, was du erreichen willst.
Aber so wie es für mich aussieht, verwendest du dann die falschen Kompos.
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
andisun 
      
Beiträge: 61
Win 98, Win Xp
D5 Stan, D7 Ent
|
Verfasst: Mi 12.03.03 16:18
kann sein, das ich die falschen kompos benutze, aber was meinst du sollte ich dne benutzen???
ich meine eine "normale" combobox lässt immer manuelle eingaben zu, ausser man setzt den style um...
also wird es doch die richtige kompo sein, aber anscheinend will sie nciht so wie ich...
vieleicht muss man da auch selbst eine programmieren und von der cb ableiten... (da kenn ich mich aber überhaupt nciht aus...)
naja das bespiel was ihr mir da geschreiben habt haute ja auch genau hin, nur das ich halt die cb auch zum eingeben neuer Namen benutzen will, fall es den noch ncith gibt, wir der dann in die liste der cb hinzugefügt... aber halt mit name und wert wenn man dann wieder auswählt, dann steht nur ncoh der name drin...
so stell ich mir das vor, nur hab ich immer noch keinen schimmer wie das am besten geht bzw wie überhaupt.
wenn eine cb nur für feste einträge wäre, warum gibt es dann das value text???
|
|
|