Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi aus funktion herraus auf listbox zugreifen (https://www.delphipraxis.net/110976-aus-funktion-herraus-auf-listbox-zugreifen.html)

Cirrius 27. Mär 2008 15:19


aus funktion herraus auf listbox zugreifen
 
Hey Leute, mich plagt zur Zeit ein Problem und selbst bin ich mir nicht sicher woran das liegen kann...

Ich habe ein Auswerteprogramm für meinen Verein geschrieben, kurz zur Funktion die mir Sorgen macht:

Durch ein Enter in einer Edit-Box wird mit Hilfe dieser Funktion

Delphi-Quellcode:
procedure Tfrm_main.edt_zeitKeyPress(Sender: TObject; var Key: Char);
var
  minuten          : string;
  sekunden         : string;
  millisekunden    : string;
  fehlersekunden   : string;
begin
  if ord(key) = 13 then  //Enter Taste
    begin
        begin
          minuten        := copy(edt_zeit.Text,1,1);
          sekunden       := copy(edt_zeit.Text,2,2);
          millisekunden  := copy(edt_zeit.Text,4,2);
          fehlersekunden := copy(edt_zeit.Text,7,2);
          lbox_zeitwert.Items.Strings[lbox_fahrername.ItemIndex] :=
            minuten+'.'+sekunden+'.'+millisekunden+' '+fehlersekunden;
          lbox_fahrername.ItemIndex := lbox_fahrername.ItemIndex+1;
          edt_zeit.Clear;
        end;
    end;
end;
ein Zeitwert in eine Listbox eingetragen.

So, da ich nun die Daten der Listbox auswerten möchte mache ich dies mit folgender Funktion:

Delphi-Quellcode:
procedure zeiteintragen(typ:integer;fahreranzahl:integer);
//Eintragen der Gesamtzeit(mit FS!) und der Fehlersekunden in Array
//Type 1: 1. Lauf, Type 2: 2. Lauf
var
  i : integer;
begin
  case typ of
  1:
    begin
    for i := 1 to fahreranzahl do
      begin
        a_wertung[i,2] := zeitpicker(frm_main.lbox_zeitwert.Items.Strings[i-1]);
        a_wertung[i,5] := copy(frm_main.lbox_zeitwert.Items.Strings[i-1],9,2);
      end;
    end;
  2:
    begin
    for i := 1 to fahreranzahl do
        begin
          a_wertung[i,3] := zeitpicker(frm_main.lbox_zeitwert.Items.Strings[i-1]);
          a_wertung[i,6] := copy(frm_main.lbox_zeitwert.Items.Strings[i-1],9,2);
        end;
    end;
  end;
end;
Nun bekomme ich in der Zeile

Delphi-Quellcode:
a_wertung[i,2] := zeitpicker(frm_main.lbox_zeitwert.Items.Strings[i-1]);
Den Fehler, daß der Listenindex das Maximum (0) überschreitet, obwohl sich in der Listbox die Zeitwerte befinden.

Kann es sein sein das ich von einer Funktion heraus nicht ohne weiteres auf die Daten zugreifen kann? Ich bräuchte dringend Hilfe, da ich das Programm in ca. einer Woche bräuchte. Wäre sehr dankbar für jeden Tip.

Sebastian

Fussball-Robby 27. Mär 2008 15:28

Re: aus funktion herraus auf listbox zugreifen
 
Hey, herzlich Willkommen in der DP :dp:
Was ist a_wertung den Überhaupt? Eine ListBox? Eine Variable?

Mfg

Medium 27. Mär 2008 15:28

Re: aus funktion herraus auf listbox zugreifen
 
Du solltest dir besser mal TSrings.Add() ansehen. So wie zu die Einträge hinzufügst, gehe ich fast davon aus, dass diese wild in unreserviertem Speicher landen.

RavenIV 27. Mär 2008 15:30

Re: aus funktion herraus auf listbox zugreifen
 
Du solltest alle procedures / functions der Klasse / dem Formular (Tfrm_main) zuweisen.
Sonst können sie nämlich nicht auf Elemente des Forms zugreifen.

Delphi-Quellcode:
...
public
  MeineProcedure(...);
...
...
Tfrm_main.MeineProcedure(...);
begin
end;
...
...

Medium 27. Mär 2008 15:49

Re: aus funktion herraus auf listbox zugreifen
 
Können sie schon, wenn sie voll qualifiziert werden, wie es der TE auch gemacht hat. Dass das aber von Stil und sauberer OOP so weit entfernt ist wie möglich, macht es mehr als änderungswürdig, ja.
Edit: Das ist hier allerdings nicht die Ursache des Fehlers.

RavenIV 27. Mär 2008 15:53

Re: aus funktion herraus auf listbox zugreifen
 
Zitat:

Zitat von Medium
Können sie schon, wenn sie voll qualifiziert werden, wie es der TE auch gemacht hat. Dass das aber von Stil und sauberer OOP so weit entfernt ist wie möglich, macht es mehr als änderungswürdig, ja.
Edit: Das ist hier allerdings nicht die Ursache des Fehlers.

Genau.
Als Anf$nger sollte man sich gleich einen richtigen Stil aneignen.

Dass dies der Fehler ist, hab ich auch nicht behauptet.

RavenIV 27. Mär 2008 15:58

Re: aus funktion herraus auf listbox zugreifen
 
Zitat:

Zitat von Fussball-Robby
Was ist a_wertung den Überhaupt? Eine ListBox? Eine Variable?

Das "a_" könnte darauf hindeuten, dass es ein Array ist.
Somit muss das Array erst mal initialisiert werden.

Ausserdem ist "a_wertung" kein allzu toller Name.
Besser wäre hier schon WertungsArray.
In Delphi setzt man den Typ einer Variablen nicht vorne an.

Medium 28. Mär 2008 17:39

Re: aus funktion herraus auf listbox zugreifen
 
Zitat:

Zitat von Cirrius
Den Fehler, daß der Listenindex das Maximum (0) überschreitet, obwohl sich in der Listbox die Zeitwerte befinden.

Dieser Wortlaut des Fehlers taucht jedoch auch mit eingeschalteter Bereichsprüfung nie bei einem Zugriff über Arraygrenzen hinaus auf. Es ist ein eindeutiger Hinweis darauf, dass ein TStrings oder TList Nachfahre über seine Grenze hinaus geschrieben/gelesen wird, und daher würde ich nach wie vor eher auf die Art und Weise der Befüllung der ListBox setzen.

Cirrius 28. Mär 2008 22:10

Re: aus funktion herraus auf listbox zugreifen
 
danke erst mal für eure tips, ich hab es nun auf folgende art und weise gelöst - hab die Modularisierung einfach mal sein lassen und meine funktionen wieder schön in die onclick routine des "lauf beenden" buttons geworfen... fragt mich nicht warum, aber so geht es...

leider hab ich für die tiefgründige verbesserung keine zeit mehr, das programm sollte ja schon längst fertig sein :roll:

zum stil: ja, mein stil ist versaut, aber nach mittlerweile 5 jahren delphi kann ich daran auch nichts mehr ändern, ich stelle die bezeichner immer schön in Präfixnotation vorran und danke wegen des tipps wegen Add - das war wohl eher ein ganz dummer flüchtigkeitsfehler die listbox so zu befüllen, gebracht hatte es trotzdem nichts, nach der änderung kam der gleiche fehler...

vielen dank für eure hilfe

Medium 29. Mär 2008 04:55

Re: aus funktion herraus auf listbox zugreifen
 
Dann wäre die Frage, ob "fahreranzahl" = "ListBox.Items.Count" ist. Den Aufruf zeigst du oben ja leider nicht ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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