| Autor |
Beitrag |
LonghornUser
      
Beiträge: 796
|
Verfasst: So 26.04.09 15:37
Hallo,
ich bin gerade etwas ratlos. Ich weise einem String einen anderen zu. Aber die Zuweisung klappt aus irgendeinem Grund nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| showmessage(s1); showmessage(Combobox3.Itemsex[2].Caption); Combobox3.Itemsex[2].Caption := s1; showmessage(s1); showmessage(Combobox3.Itemsex[2].Caption); |
Ich habe da irgendeinen Denkfehler drin, zumal aus bei allen andere Stringzuweisungen (die danach und auch davor kommen) klappt.
Könnt ihr mir da bitte nochmal aushelfen  ?
Ciao LHUser
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: So 26.04.09 15:40
sehr mysteriös. setz doch mal ein paar Haltepunkte und beobachte das Verhalten von der Caption mal schritt für schritt.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 26.04.09 15:43
Der Code sieht soweit in Ordnung aus, die Frage ist nur, was ist Itemsex? (und will ich das überhaupt wissen? )
Vielleicht solltest du einen größeren Ausschnitt deines Quellcodes posten.
mfg
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 26.04.09 15:46
Das geht leider nicht so einfach, denn das ganz befindet sich im OnCreate. Und es hat auch kein anderes Event Zugriff auch.
Führe ich die Routine allerdings zweimal aus, geht das ganze ???
ItemsEx ist die Items-Eigenschaft einer ComboboxEx (VCL). Was auch sehr komisch ist: Wenn ich nicht s1 sondern 'XYZ' zuweise, geht es ???????
Korrigiere: Das geht doch nicht.
Edit: Also scheinbar hab ich das Problem "behoben". Wenn ich es so mache, geht es wieder:
Delphi-Quelltext 1: 2:
| combobox3.ItemIndex := 2; Combobox3.Itemsex[2].Caption := s1; |
Nur das kann doch nicht die Lösung sein, oder ?
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 26.04.09 15:55
Gibt es nicht noch eine andere Eigenschaft außer ItemsEx, die du nutzen kannst? Vielleicht ist die ja nur Read-Only.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 26.04.09 16:01
Nein, das ist die einzige. Witzigerweise geht die Zuweisung bei allen anderen ItemsEx's. Und wieso geht es auf einmal, wenn ich den ItemIndex verändere ?
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: So 26.04.09 16:14
Hallo,
hast du da nicht eine Ebene vergessen?
Delphi-Quelltext 1:
| Combobox3.ItemsEx.ComboItems[2].Caption := 'hallo'; |
MfG
Regan
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 26.04.09 16:41
Mhm, das hat das Problem nicht gelöst. Ich weiß auch nicht wirklich, wo der Unterschied zwischen beiden Wegen ist. Beide lassen sich erfolgreich kompilieren, aber der Fehler zur Laufzeit bleibt bei beiden bestehen.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 26.04.09 16:56
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); var s1: string; begin s1 := 'test123'; ComboBoxEx1.ItemsEx[2].Caption := s1; end; |
Tut bei mir ohne Probleme.
Vorher steht "blah" an der Stelle, und wenn ich auf den Button klicke test123.
Hast du vielleicht noch Eigenschaften zugewiesen, die solch eine Änderung verhindern könnten?
Kannst du das Problem in nem Test-Projekt nachstellen?
Überschreibst du den Eintrag später nochmal irgendwo?
Edit: Man sollte das Ex echt groß schreiben - sonst könnte man auf merkwürdige Gedanken kommen 
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 26.04.09 17:44
Nee, ein Testprojekt lässt sich da nicht zusammenstellen. Ist etwas verzwickt.
Wenn ich mal Muße habe, suche ich nochmal, aber im Moment reicht es auch so. Danke !
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 26.04.09 17:53
Also TComboItemEx.Caption ist laut Hilfe schonmal nicht read-only.
Was mir dazu einfällt, ist, dass s1 vielleicht nicht definiert ist?
@Xentar: Du meinst, falls die SHIFT-Taste ein wenig klemmt? 
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 26.04.09 18:10
s1 ist eine globale Variable. Aber wie gesagt, ich mache diese Zuweisungen im Rahmen einer Lokalisierung (Sprachen) und es klappte bisher immer.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 26.04.09 19:02
sorry. Also ich meinte eigentlich, ob der Variablen ein Wert zugewiesen wurde.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: So 26.04.09 19:19
Pack das setzen des ComboBox-Eintrags ins OnShow oder definiere eine weitere Routine die du am Ende von OnCreate aufrufst. Z. B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Translate; begin ComboBox1.ItemsEx[0].Caption := 'blubb'; end;
procedure TForm1.FormCreate(Sender: TObject); begin Translate; end; |
EDIT: Vllt. noch ComboBox1.Refresh aufrufen...
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 26.04.09 19:25
Genauso ist es bereits. Ich habe eine SetLanguage Routine, wo das alles drin steht. Nur versteh ich nicht ganz, in wieweit das das Problem lösen soll ?
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: So 26.04.09 19:30
LonghornUser hat folgendes geschrieben : | | Genauso ist es bereits. Ich habe eine SetLanguage Routine, wo das alles drin steht. Nur versteh ich nicht ganz, in wieweit das das Problem lösen soll ? |
So mach ich das in allen meiner Projekte und es geht.
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:
| procedure TfrmControlPanel.FormCreate(Sender: TObject); begin Config := TCookieCrumblerApp.Create(nil); if FileExists(ExtractFilePath(Application.ExeName) + 'config.dat') then Config.LoadFromFile(ExtractFilePath(Application.ExeName) + 'config.dat') else Config.LoadFromFile(IncludeTrailingPathDelimiter(GetShellFolder(CSIDL_APPDATA)) + 'CapSystems\CookieCrumbler\config.dat'); LanguageManager.LoadLanguage(LanguageManager.LanguageExists(Config.Language));
if (Config.MainWindowLeft = -1) and (Config.MainWindowTop = -1) then Position := poScreenCenter else Position := poDesigned;
Left := Config.MainWindowLeft; Top := Config.MainWindowTop; end;
procedure TfrmControlPanel.FormShow(Sender: TObject); begin Translate; end;
procedure TfrmControlPanel.Translate; begin with LanguageManager.CurrentLanguage do begin itmFileMenu.Caption := ReadString('frmControlPanel', 'itmFileMenu', ''); end; RefreshAllLabels; end; |
|
|