Autor Beitrag
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 12.08.07 23:16 
ich habe ein problem mit dem Popupmenu.

ich verändere während der laufzeit die caption und den hint von popmenüeinträgen. doch wenn ich das popupmenu dann aufrufen will dann kommt n error weil der listenindex das maximum (-1) übersteigt.
kann mir wer dabei helfen?

lg el
cuejo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mo 13.08.07 00:15 
Dann zeig doch mal wie Du das machst. Die berühmte Glaskugel ist noch immer in Reparatur. :?

_________________
Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 13.08.07 15:55 
ok. ich nehm ja rücksicht auf die progger ohne funktionierende Glaskugel und zeig ein bissal was von meinem Quelltext her:

nur mal der relevante teil (aus dem gedächnis heraus). Wenn ich den weglass funzt wie geschmiert.
ausblenden 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:
procedure TOptions.LoadLang(AFilename: string);
var XML: TJvSimpleXML;
begin
  XML:=TJvSimpleXML.create(nil);
  try
    XMl.Loadfromfile(AFilename);
    with XML.Root.items.itemnamed['Menu'do begin
      item1.caption:=items.itemnamed['item1'].items.itemnamed['caption'].Value;
      item2.caption:=items.itemnamed['item1'].items.itemnamed['caption'].Value;
      item3.caption:=items.itemnamed['item1'].items.itemnamed['caption'].Value;
      item4.caption:=items.itemnamed['item1'].items.itemnamed['caption'].Value;
      item5.caption:=items.itemnamed['item1'].items.itemnamed['caption'].Value;
      item6.caption:=items.itemnamed['item1'].items.itemnamed['caption'].Value;
      item1.Hint:=items.itemnamed['item1'].items.itemnamed['Hint'].Value;
      item2.Hint:=items.itemnamed['item1'].items.itemnamed['Hint'].Value;
      item3.Hint:=items.itemnamed['item1'].items.itemnamed['Hint'].Value;
      item4.Hint:=items.itemnamed['item1'].items.itemnamed['Hint'].Value;
      item5.Hint:=items.itemnamed['item1'].items.itemnamed['Hint'].Value;
      item6.Hint:=items.itemnamed['item1'].items.itemnamed['Hint'].Value;
    end;
  finally
    XML.Free;
  end;
end;
little-wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

WinXP
Delphi 5 Enterprise, Delphi 2006 Enterprise
BeitragVerfasst: Mo 13.08.07 16:03 
hallo elundril

em, bin jetzt nicht ganz sicher, aber könnte es daran liegen, weil du "xml" in der funktion als variable deklarierst und danach etwas darauf zuweist. danach gibst du in finally "xml" wieder frei und probierst nachher (hier nicht ersichtlich) auf "xml" zu zu greifen? hoffe habe das jetzt so richtig interpretiert. wenn ja, ist meine frage gleich deine antwort...

gruss

little-wolf
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 13.08.07 17:12 
nene sonst würd die XML komponente schreien und nicht das popupmenü.

der fehler tritt ja nur auf wenn das programm schon läuft und man während der laufzeit das popupmenü aufmacht. (erst nach dem code)

lg elundril
little-wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

WinXP
Delphi 5 Enterprise, Delphi 2006 Enterprise
BeitragVerfasst: Mo 13.08.07 17:19 
sorry, aber für mich siet der gepostete code so aus, dass items der variable "xml" abgefüllt werden

ausblenden Delphi-Quelltext
1:
with XML.Root.items.itemnamed['Menu'do begin ...					


lass doch mal probehalber das xml.free weg...

ich kenne allerdings diese komponente (TJvSimpleXML) nicht. evtl. kapier ich einfach wirklich nicht, was genau du hier machst...
cuejo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 142

Win XP
Delphi 7 Personal und 2005 PE
BeitragVerfasst: Mo 13.08.07 17:44 
Worum handelt es sich denn bei item1 bis item6?

_________________
Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 13.08.07 17:51 
Schätze, das Java Simple XML Teil funktioniert wie eine Ini-Datei. Damit würde das Weglassen der Freigabe ein böses Speicherleck verursachen und das wollen wir doch vermeiden ;)
Ich schätze, item1-6 sollen die Popup-Menü-Items sein :gruebel:
Von welchem Listenindex da die Rede ist hab ich aber keine Ahnung - sicher, dass itemnamed in eckigen Klammern einen String erwartet? Sind das keine Runden? Hab sowas noch nie gesehen :shock:
Vielleicht versuchst du mal, die JvSimpleXML anstelle bei jedem Aufruf der Prozedur einmalig im FormCreate zu initialisieren (Global deklarieren!) und im onClose frei zu geben, das würde auch etwas Zeit sparen.
Ausser dem Erwähnten find ich nix, was ich seltsam finde :nixweiss:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mo 13.08.07 21:44 
Hi,

user profile iconJayEff hat folgendes geschrieben:
Schätze, das Java Simple XML Teil


Hm, ich tippe eher dass Jv fuer Jedi Visual (Component Library) steht.

twm
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 13.08.07 22:29 
user profile icondummzeuch hat folgendes geschrieben:
Jv fuer Jedi Visual (Component Library)

hab ich verdreht im Kopf, grad... :autsch:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 14.08.07 12:32 
also das mit der SimpleXML Kompo schaut ja schon mal korrekt aus. Und da meckert er doch auch nicht, oder ?
Füll in der Procedure doch die MenuItems mal mit statischen Strings statt mit den Sachen aus dem XML File.
Also item1.caption := 'hallo1';

_________________
In the beginning was the word.
And the word was content-type: text/plain.
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 14.08.07 14:42 
hallo,

als ich alles noch mal durchgegangen bin hab ich entdeckt das ich eine zeile doppelt geschrieben habe und beim debuggen es nicht gemerkt habe. deswegen wusst ich nicht wo der fehler herkommt. ich bin draufgekommen wo der fehler steckt aber noch nicht wie ich ihn beseitigen kann. Ich muss vielleicht noch dazu sagen das der menüpunkt bei dem die exception geworfen wird ein untermenü hat. warum die exception geworfen wird weis ich auch nicht. Fällt euch was dazu ein??

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 TfrmGeneralSettings.LoadLanguage(AFilename: String);
var XML: TJvSimpleXML;
begin
  XML:=TJvSimpleXML.Create(nil);
  try
    XML.LoadFromFile(AFilename);
    with XML.Root.Items.ItemNamed['frmGeneralSettings'].Items.ItemNamed['Menu'do begin
      NewNote1.Caption:=items.ItemNamed['NewNote'].Items.ItemNamed['Caption'].Value;
      NewNote1.Hint:=items.ItemNamed['NewNote'].Items.ItemNamed['Hint'].Value;
      Contacts1.Caption:=items.ItemNamed['Contacts'].Items.ItemNamed['Caption'].Value;
      Contacts1.Hint:=items.ItemNamed['Contacts'].Items.ItemNamed['Hint'].Value;
      GeneralSettings1.Caption:=items.ItemNamed['GeneralSettings'].Items.ItemNamed['Caption'].Value;
      GeneralSettings1.Hint:=items.ItemNamed['GeneralSettings'].Items.ItemNamed['Hint'].Value;
      Help1.Caption:=items.ItemNamed['Help'].Items.ItemNamed['Caption'].Value;
      Help1.Hint:=items.ItemNamed['Help'].Items.ItemNamed['Hint'].Value;
      AboutSpeedNotes1.Caption:=items.ItemNamed['About'].Items.ItemNamed['Caption'].Value;
      AboutSpeedNotes1.Hint:=items.ItemNamed['About'].Items.ItemNamed['Hint'].Value;
      Close1.Caption:=items.ItemNamed['Close'].Items.ItemNamed['Caption'].Value;
      Close1.Hint:=items.ItemNamed['Close'].Items.ItemNamed['Hint'].Value;
      AllNotes1.Caption:=items.ItemNamed['AllNotes'].Items.ItemNamed['Caption'].Value;
      AllNotes1.Hint:=items.ItemNamed['AllNotes'].Items.ItemNamed['Hint'].Value;
      
      ShowNotes1.Caption:=items.ItemNamed['ShowNotes'].Items.ItemNamed['Caption'].Value;
      ShowNotes1.Hint:=items.ItemNamed['ShowNotes'].Items.ItemNamed['Hint'].Value;    
      
  
      {Hier muss es sein. Ich hab alle zeilen eingeklammert und dann einer nach der anderen wieder ausgeklammert. In dem gehighlighteten Text steckt der hund drin.}
    end;
    Application.ProcessMessages;
  finally
    XML.Free;
  end;
end;


lg elundril
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.08.07 14:56 
Also raten würde ich jetzt, dass ItemNamed den Eintrag nicht findet. Dann dürfte der Index -1 sein, des gesuchten Eintrags...
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 14.08.07 15:04 
user profile iconjaenicke hat folgendes geschrieben:
Also raten würde ich jetzt, dass ItemNamed den Eintrag nicht findet. Dann dürfte der Index -1 sein, des gesuchten Eintrags...
Nee, also ich kenn das bei der JvSimpleXML so, dass wenn das ItemNamed keinen passenden Eintrag findet, es nullzurückgibt, weswegen an dieser Stelle dann eine Access Violation kommen müsste.

_________________
In the beginning was the word.
And the word was content-type: text/plain.
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Di 14.08.07 15:26 
Hi,

user profile iconelundril hat folgendes geschrieben:
als ich alles noch mal durchgegangen bin hab ich entdeckt das ich eine zeile doppelt geschrieben habe und beim debuggen es nicht gemerkt habe. deswegen wusst ich nicht wo der fehler herkommt. ich bin draufgekommen wo der fehler steckt aber noch nicht wie ich ihn beseitigen kann. Ich muss vielleicht noch dazu sagen das der menüpunkt bei dem die exception geworfen wird ein untermenü hat. warum die exception geworfen wird weis ich auch nicht. Fällt euch was dazu ein??

ausblenden Delphi-Quelltext
1:
2:
ShowNotes1.Caption:=items.ItemNamed['ShowNotes'].Items.ItemNamed['Caption'].Value;
ShowNotes1.Hint:=items.ItemNamed['ShowNotes'].Items.ItemNamed['Hint'].Value;

Hier muss es sein. Ich hab alle zeilen eingeklammert und dann einer nach der anderen wieder ausgeklammert. In dem gehighlighteten Text steckt der hund drin.


Kann es evtl. sein, dass als Caption ein Leerstring zugewiesen wird? Nicht, dass ich wuesste, was dann genau passiert...

twm
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 14.08.07 16:18 
nö hab die XML datei selbst geschrieben. glaub nicht das ich das ausgelassen habe. und ich glaub kaum das dann ne ListIndex outofbounds kommen würde.

lg elundril

(noch ein nachtrag: ich benutze JvPopupmenu)
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Di 14.08.07 16:45 
user profile iconelundril hat folgendes geschrieben:
nö hab die XML datei selbst geschrieben. glaub nicht das ich das ausgelassen habe. und ich glaub kaum das dann ne ListIndex outofbounds kommen würde.


Wenn das reproduzierbar ist und auch im Debugger passiert, sollte es doch moeglich sein, herauszufinden, auf welche Liste sich der Fehler bezieht.
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 14.08.07 18:16 
omg! ich glaub ich hab nen debst schwachsinnigen fehler gemacht. Ich überprüf das mal und sag euch bescheid.

lg elundril
elundril Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 15.08.07 15:15 
so ich hab den fehler jetzt gefunden.

wenn ihr ab hier weiterlest seit ihr damit einverstanden mich nicht aus dem forum zu kicken oder mich zu steinigen.

Mein Fehler war folgender:

ich add ins untermenü von jenem Menüpunkt wo er die Exception wirft div. menüeintrage. Ich hab das früher, weil ich nicht gewusst hab wie sonst (ich hab den index vom menüitem nicht gewusst), so gemacht:

ausblenden Delphi-Quelltext
1:
popupmenu.items[popupmenu.items.indexof(popupmenu.items.find('Show Notes')].add(NewItem);					


wie ich dann rausbekommen habe welches menuitem das ist hab ichs natürlich überall umgestell. dacht ich jedenfalls. aber ich hab doch einen Teil übersehen. Jetzt hab ichs überall auf diesen Coder geändert:

ausblenden Delphi-Quelltext
1:
popupmenu.items[2].add(NewItem);					


natürlich wirft er dann ne exception wenn ich das menü aufrufe und der den menüpunkt zum eintragen nicht mehr findet.

damit erklärt sich auch warum eure zeit vergeudet ist. Es tut mir leid. Ich geh jetzt und schreib 100x: ich muss genauer meinen Quelltext lesen bevor ich ins Delphiforum "heulen" gehe.

schönen tag noch

lg elundril