Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Sehr mysteriöses Problem mit Stringzuweisung
LonghornUser - So 26.04.09 15:37
Titel: Sehr mysteriöses Problem mit Stringzuweisung
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 - 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 - 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? :lol:)
Vielleicht solltest du einen größeren Ausschnitt deines Quellcodes posten.
mfg
LonghornUser - 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 - 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 - 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 - 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 - 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 - 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 ;)
LonghornUser - 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 - 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? :lol:
LonghornUser - 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 - So 26.04.09 19:02
sorry. Also ich meinte eigentlich, ob der Variablen ein Wert zugewiesen wurde.
Andreas L. - 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 - 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. - 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.
Delphi-Quelltext
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; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!