Zum Aufbau:
Es werden mehrere TMenuItems aus einer Ini gelesen und in einer Schleife erstellt, da sich die Anzahl erhöhen kann.
Ein Click auf ein solchen Item führt zu einer Funktion, in welcher die Caption des Items ausgelesen wird. Das muss so sein, da diese Caption der String aus der INI File ist.
Verwendet wird:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if ItemStr <> '!error!' then begin newItem := TMenuItem.Create(self); newItem.Caption := ItemStr; newItem.OnClick := SkinClick; MenuSkins.Add(newItem); end; until ItemStr = '!error!'; |
'!error!' wird geschrieben, wenn die Loop enden soll, weil es keine weiteren TMenuItems zu erstellen gibt, da in der INI keine weiteren stehen.
In der Funktion SkinCLick steht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.SkinClick(Sender: TObject); var index: string; begin index := (sender as TMenuItem).caption; ActiveSkin := Index; LoadSkin; // Showmessage(ActiveSkin+' '+midstr(index,2,1)); // Hier ist bereits das & vorhanden { Verschiedene Deklarationen. } |
In der Funktion Loadskin wird die INI-File der einzelnen Skin geladen.
Und: Der Fehler muss schon in Zeile 5 sein, da hier die var Index schon dieses & enthält.
@Blackheart: Was soll ich als Wert für AutoLineReduction angeben? Ich weiss nicht, was der da Standardmässig erstellt. Ich glaube "maParent" Obe siehst du jam, dass ich nur Caption und OnClick-Event belege.
EDIT:
Witzig ist: Direkt nach der Zeile "ActiveSkin := Index;" ist die ActiveSkin noch normal und der Index hat das & drin.
Wenn ich aber danach die Procedure Loadskin aufrufe ist danach gleich am Anfang die Variable ActiveSkin AUCH korrupt, obwohl ich NICHTS damit gemacht habe. Ich habe lediglich die LoadSkin Proc gestartet und gleich nach begin dieser nochmal ActiveSkin anzeigen lassen.
Was zur Hölle geht da ab??
EDIT2: Alsd, wie so oft, wurde das Problem nicht gelöst, aber umschifft.
Nach dem Motto "Was ich erfassen kann, kann ich auch töten" hab ich das & im String gekillt mit der Line:
Quelltext
1:
| Delete(ActiveSkin,Pos('&', ActiveSkin),1 ); |
Ausgedrückt also: Lösche an der Stelle, wo das "&" vorkommt ein Zeichen.
Seitdem gehts, obwohl ich immer noch gerne die Ursache für dieses mysteriöse & gewusst hätte, also wenn da einer was weiss...