Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listenindex überschreitet das Maximum (https://www.delphipraxis.net/57211-listenindex-ueberschreitet-das-maximum.html)

Lucky83 17. Nov 2005 10:41


Listenindex überschreitet das Maximum
 
Hallo,

ich hab auf einer Outlookbar ein Button liegen und möchte je nach dem die Caption von dem Button ändern

Code:
for i:= 0 to jvoutlookbar1.ActivePage.Buttons.Count-1 do
      JvOutlookBar1.ActivePage.Buttons[i].Caption:= 'Test'
und das komische ist, dass es oft klappt und ab und zu aber diese Fehlermeldung "Listenindex überschreitet das Maximum(1)" kommt.
Kann es sein, dass die Outlookbar da Schwierigkeiten macht?

Grüßle
Lucky

Der_Unwissende 17. Nov 2005 11:10

Re: Listenindex überschreitet das Maximum
 
Hi,
du solltest immer prüfen ob es mindestens ein Element gibt, wenn du über eine Menge iterierst. Das ist ein genereller Tip, einfach weil es sauber ist, könnte auch bei dir schon das Problem sein

Delphi-Quellcode:
if jvOutlookBar1.ActivePage.Buttons.Count > 0 then
  begin
    for i := 0 to jvOutlookBar1.ActivePage.Buttons.Count - 1 do
      begin
        // whatever
      end; // for i := 0 to jvOutlookBar1.ActivePage.Buttons.Count - 1
  end; // if jvOutlookBar1.ActivePage.Buttons.Count > 0
So springt Delphi nie in die for-Schleife, wenn es weniger als ein Element gibt. Während du bei 0 Buttons immer noch einen Durchlauf hast.

Angel4585 17. Nov 2005 11:12

Re: Listenindex überschreitet das Maximum
 
Bei 0 Button würde die Schleife doch von 0 bis -1 gehen. Hat man da wirklich einen Durchlauf? glaube nicht oder?
Also bei
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
begin
for i:= 0 to -1 do
 ShowMessage('OK');
end;
erscheint nie ein ShowMessage.

sakura 17. Nov 2005 11:20

Re: Listenindex überschreitet das Maximum
 
Zitat:

Zitat von Angel4585
Bei 0 Button würde die Schleife doch von 0 bis -1 gehen. Hat man da wirklich einen Durchlauf? glaube nicht oder?

Es kommt darauf an, wie i deklariert wurde. Deklariere es als Byte und die siehst den Durchlauf oft genug ;)

...:cat:...

Lucky83 17. Nov 2005 11:45

Re: Listenindex überschreitet das Maximum
 
Danke, jetzt hab ich es ein paar Mal getestet und es kam keine Fehlermeldung.
Es gab zwar den Button und er ging auch in die Schleife rein.....strange..

hatte i als Integer deklariert und es gab auch einen Durchlauf, da es ja auch einen Button gab... :gruebel:

Hoffe das hält jetzt. Werde es noch ein paar Mal testen...

Luckie 17. Nov 2005 12:33

Re: Listenindex überschreitet das Maximum
 
Zitat:

Zitat von Lucky83
Hoffe das hält jetzt.

Programmiesrt du mit Patex? :mrgreen:

Lucky83 17. Nov 2005 14:22

Re: Listenindex überschreitet das Maximum
 
Nein mit delphi!...

Und die Fehlermeldung kommt immer noch. Hab keine Ahnung warum sie manchmal kommt und manchmal nicht....

Angel4585 17. Nov 2005 14:34

Re: Listenindex überschreitet das Maximum
 
mach mal

Delphi-Quellcode:
for i:= jvOutlookBar1.ActivePage.Buttons.Count - 1 downto 0 do
vielleicht hilfts ja

schreibt doch mal bissl mehr code hier rein, vielleicht liegt das Problem wo ganz anders.

Lucky83 17. Nov 2005 15:07

Re: Listenindex überschreitet das Maximum
 
Hat leider nicht geholfen..
Also ich erzeuge meinen Button folgenderweise:
Delphi-Quellcode:
procedure TFrmCRMMain.addJvOutlookButton(page:Integer;BtnIndex:Integer;Caption:Str15;ImgIndex:Integer;tag:Integer);
begin
  jvoutlookbar1.Pages[page].Buttons.Insert(BtnIndex);
  jvoutlookbar1.Pages[page].Buttons[BtnIndex].ImageIndex:=imgIndex;
  jvoutlookbar1.Pages[page].Buttons[BtnIndex].Caption:=caption;
  jvoutlookbar1.Pages[page].Buttons[BtnIndex].tag:=Tag;
end;
danach öffne ich das Formular und aktuallisiere die "Caption" über einen Timer wie oben beschrieben.
Das komische ist ja, dass die Fehlermeldung nicht immer kommt und ich konnte keinen Unterschied festetllen. Er durchläuft jedesmal einmal die for-Schleife....


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz