Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  showmessage(s1); //es wird "XYZ" ausgegeben, der Inhalt von s1
  showmessage(Combobox3.Itemsex[2].Caption); //es wird "ABC" ausgegeben, der Inhalt von Item2 vor der Zuweisung

  Combobox3.Itemsex[2].Caption  := s1; //Die Zuweisung

  showmessage(s1); //es wird "XYZ" ausgegeben, der Inhalt von s1
  showmessage(Combobox3.Itemsex[2].Caption); //es wird "ABC" ausgegeben, der Inhalt von Item2 vor der Zuweisung


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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
  combobox3.ItemIndex := 2;
  Combobox3.Itemsex[2].Caption  := s1;


Nur das kann doch nicht die Lösung sein, oder ?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



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


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 26.04.09 16:14 
Hallo,

hast du da nicht eine Ebene vergessen?
ausblenden Delphi-Quelltext
1:
Combobox3.ItemsEx.ComboItems[2].Caption := 'hallo';					


MfG
Regan
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 26.04.09 16:56 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 26.04.09 19:02 
sorry. Also ich meinte eigentlich, ob der Variablen ein Wert zugewiesen wurde.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Translate;
begin
  ComboBox1.ItemsEx[0].Caption := 'blubb';
  //weitere Controls übersetzen
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Einstellungen laden
  //Sprachdatei laden
  //etc
  Translate;
end;


EDIT: Vllt. noch ComboBox1.Refresh aufrufen...
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: So 26.04.09 19:30 
user profile iconLonghornUser hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden volle Höhe 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 = -1and (Config.MainWindowTop = -1then
    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''');
    //etc...
  end;
  RefreshAllLabels;
end;