Autor Beitrag
Atreyu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mo 26.11.07 23:16 
Ich habe eine INI-File im Editor angegeben.

ausblenden Quelltext
1:
val2=ice					


Nur komischerweise liest ReadString:
user defined image

Seht ihr den Strich unter dem "c"?

Ich hab mal das 2te Zeichen ausgeben lassen... Das besteht komischerweise aus einem Buchstaben, der wie 2 "_" aussieht. Also doppelt so lang?

Was liest der für eine Kacke? Sonst hat er Pfade und alles mögliche auch immer gelesen, nur hier versagt er.



EDIT: Hab gerade festgestellt, dass er "i&ce" schreibt. Also ist es WriteString. Aber wieso, der soll den ganz normal schreiben!


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 26.11.2007 um 23:44
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 27.11.07 07:48 
wenn val2 als string deklariert wurde, sollte es auch richtig zugewiesen werden

ausblenden Delphi-Quelltext
1:
val2 := 'ice';					


der von dir angegebene Code vergleicht val2 mit ice
(wenn ice nicht als Variable/Konstante deklariert wurde, müsste es eigentlich eine Compilerfehlermeldung geben `...)

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 27.11.07 09:29 
user profile iconAtreyu hat folgendes geschrieben:
Ich habe eine INI-File im Editor angegeben.

ausblenden Quelltext
1:
val2=ice					
user profile iconzuma hat folgendes geschrieben:
wenn val2 als string deklariert wurde, sollte es auch richtig zugewiesen werden

ausblenden Delphi-Quelltext
1:
val2 := 'ice';					


der von dir angegebene Code vergleicht val2 mit ice
(wenn ice nicht als Variable/Konstante deklariert wurde, müsste es eigentlich eine Compilerfehlermeldung geben `...)

Dies ist ganz offensichtlich Ini-Quelltext kein Delphi-Quelltext ;)

Diese Unterstreichung geschieht normalerweise beim Anzeigen von Strings mit einem & (Kaufmännisch-Und) drin in einer Caption. Versuche mal, den Text in einem TEdit auszugeben oder ähnlichem. Spontan würd ich behaupten, in deiner Ini ist ein '&' :nixweiss:
Ach ich seh grad dein Edit. Nun, versuche einmal, WriteString mit StringReplace aufzurufen:
ausblenden Delphi-Quelltext
1:
2:
text := 'i&ce';
ini.WriteString('x', 'y', StringReplace(text, '&', '', [rfReplaceAll]));

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Di 27.11.07 10:14 
Was speicherst Du den in der Ini TMenu Items ?
Hatte Ich dann auch mal, Ich glaub es lag an AutoLineReduction.

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Di 27.11.07 13:07 
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:
ausblenden 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:
ausblenden 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:

ausblenden 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...
hazard999
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 162

Win XP SP2
VS 2010 Ultimate, CC.Net, Unity, Pex, Moles, DevExpress eXpress App
BeitragVerfasst: Mi 28.11.07 10:32 
Hallo,

das & ist ein Hotkey.

Das nachfolgende Zeichen in der Caption wird dann mit _ ausgegeben.

Dadurch kannst du dann mit ALT und Buchstaben den Menüpunkt auswählen ohne zu klicken.

Versuchs mal mit StringReplace. Ist angenehmer und schneller als delete.

r u

René
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mi 28.11.07 12:44 
Das könnte ich, ja, aber so hats auch geklappt.

Nur würde es mich interessieren wie ein Hotkey in meine Strings kommt.
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 28.11.07 13:00 
hi

wie ich dir bereits im anderen Thread geschrieben habe, kommt das durch das menuitem.
Wenn die Eigenschaft Hotkeys auf maAutomatic steht, dann schmeißt der das & selbsttätig da rein.
einfach im OI auf maManual stellen, oder halt per Programm.

_________________
Gruß Aga
Atreyu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137


Delphi 7 Enterprise
BeitragVerfasst: Mi 28.11.07 18:28 
Ahso, danke!