Delphi-PRAXiS
Seite 2 von 3     12 3      

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 Probleme mit Listbox Einträgen (https://www.delphipraxis.net/115832-probleme-mit-listbox-eintraegen.html)

Johnny Bravo 21. Jun 2008 20:38

Re: Probleme mit Listbox Einträgen
 
LIndex ist eine Integer variable.

das ist im 2ten Formular, wo man den Alternativnamen der Listbox im ersten Formular hizufügt:(Auszug)

Delphi-Quellcode:
 [...]
         lIndex := Length(MeinArray);
         SetLength(MeinArray, lIndex + 1);
         MeinArray[lIndex].RealFileName := Form2.OpenDialog1.FileName;
         MeinArray[lIndex].DisplayName := Form4.Edit1.Text;
         Form2.ListBox1.Items.Add(MeinArray[lIndex].DisplayName);
[...]
Wie gesagt, Showmessage bekomme ich nicht angezeigt, lediglich den Fehler bei der Bereichsprüfung.
Ich weiß nicht mehr weiter.. :nerd:

Die Muhkuh 21. Jun 2008 20:39

Re: Probleme mit Listbox Einträgen
 
Sollte da nicht noch irgendwo davor ein

Delphi-Quellcode:
lIndex := ListBox1.ItemIndex;

DeddyH 21. Jun 2008 20:41

Re: Probleme mit Listbox Einträgen
 
Mir scheint, lIndex ist eine lokale Variable in der Einfüge-Prozedur. Allerdings würde sich das Programm dann gar nicht kompilieren lassen, da sollte eigentlich etwas kommen mit "unbekannter Bezeichner". Hast Du sie vielleicht noch einmal als globale Variable definiert? Vielleicht zippst Du den ganzen Schmu mal und hängst ihn hier an, sonst raten wir noch ewig weiter.

Johnny Bravo 21. Jun 2008 20:50

Re: Probleme mit Listbox Einträgen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, das ihr euch den code mal anschaut. Hab ihn im Anhang.

bitte nicht über den aufbau oder sonstiges wundern, ich teste im augenblick nur ein bißchen herum :wink:

mkinzler 21. Jun 2008 20:53

Re: Probleme mit Listbox Einträgen
 
Du solltest dich entscheiden, oder 2 Variablen verwenden
Zitat:

Delphi-Quellcode:
lIndex := Form2.ListBox1.ItemIndex;
lIndex := Length(MeinArray);


DeddyH 21. Jun 2008 20:58

Re: Probleme mit Listbox Einträgen
 
Mach das mal so, wie Manuel vorgeschlagen hat: als erste Zeile lIndex auf den ItemIndex der Listbox setzen (und unbedingt auf < 0 prüfen, kleiner Zusatz meinerseits).

Johnny Bravo 21. Jun 2008 21:20

Re: Probleme mit Listbox Einträgen
 
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
    var
    IconIndex : Integer;
    h : hIcon;
    S : String;
    Icon : TIcon;
    Bitmap : TBitmap;
    OpenDialog : TOpenDialog;
    lIndex: Integer;

    begin

    if (Edit1.Text = '') then
    begin
         ShowMessage('Bitte geben sie einen Namen ein.');
         exit;
        end
     else

     if Form2.ListBox1.ItemIndex < 0 then
         MeinArray[lIndex].RealFileName := Form2.OpenDialog1.FileName;
         SetLength(MeinArray, lIndex + 1);
         MeinArray[lIndex].DisplayName := Form4.Edit1.Text;
         lIndex := Form2.ListBox1.ItemIndex;
         lIndex := Length(MeinArray);
         Form2.ListBox1.Items.Add(MeinArray[lIndex].DisplayName); // hier gibts einen Fehler bei der Bereichsprüfung, wenn ich auf ok klicke. Wenn ich das entferne, wird logischerweise nichts der Listbox hinzugefügt....
       [...]
     end;

Die Muhkuh 21. Jun 2008 21:22

Re: Probleme mit Listbox Einträgen
 
Delphi-Quellcode:
lIndex := Form2.ListBox1.ItemIndex;
lIndex := Length(MeinArray);
Was steht nun wohl in lIndex drin.

DeddyH 21. Jun 2008 21:24

Re: Probleme mit Listbox Einträgen
 
Und achte mal auf die Reihenfolge, erst ermitteln und dann neu setzen. Außerdem sind nun schon wieder woanders, ursprünglich ging es doch um Form2, wieso nun um Form4?

Die Muhkuh 21. Jun 2008 21:26

Re: Probleme mit Listbox Einträgen
 
Und

Delphi-Quellcode:
 if Form2.ListBox1.ItemIndex < 0 then
bedeutet, dass nichts angewählt ist. Wie soll das ganze dann funktionieren?

Da müsste entweder >= 0 oder > -1 sein.

DeddyH 21. Jun 2008 21:28

Re: Probleme mit Listbox Einträgen
 
begin und end wären auch ganz angebracht, fällt mir gerade auf.

Johnny Bravo 21. Jun 2008 21:50

Re: Probleme mit Listbox Einträgen
 
Delphi-Quellcode:
begin
      if Form2.ListBox1.ItemIndex >= 0 then
         SetLength(MeinArray, lIndex + 1);
         MeinArray[lIndex].RealFileName := Form2.OpenDialog1.FileName;
         MeinArray[lIndex].DisplayName := Form4.Edit1.Text;
         lIndex := Form2.ListBox1.ItemIndex;
         Form2.ListBox1.Items.Add(MeinArray[lIndex].DisplayName);
      end;
      [...]
hab es so mal angepasst...hoffe das stimmt jetzt so für euch.

Der Fehler bei der Bereichsprüfung ist immernoch präsent.


Sry wenn ich euch nicht direkt folgen kann oder etwas direkt nicht verstehe, ich mach das nicht jeden tag und es ist schon spät :wink:

DeddyH 21. Jun 2008 21:52

Re: Probleme mit Listbox Einträgen
 
Ich seh da ein end, aber kein begin, das dazu passen würde.

Johnny Bravo 21. Jun 2008 21:56

Re: Probleme mit Listbox Einträgen
 
sry, das war nur ein copy&paste fehler. hab nachträglich noch nen kommentar gelöscht, und hab dabei das begin mitgenommen und falsch hingesetzt.

DeddyH 21. Jun 2008 22:00

Re: Probleme mit Listbox Einträgen
 
Ich korrigier das mal so, wie ich mir denke, dass es stimmen sollte:
Delphi-Quellcode:
      if Form2.ListBox1.ItemIndex >= 0 then
      begin //wichtig!
         lIndex := Length(MeinArray); //erstmal ermitteln
         SetLength(MeinArray, lIndex + 1);
         MeinArray[lIndex].RealFileName := Form2.OpenDialog1.FileName;
         MeinArray[lIndex].DisplayName := Form4.Edit1.Text;
         //lIndex := Form2.ListBox1.ItemIndex; wozu?
         Form2.ListBox1.Items.Add(MeinArray[lIndex].DisplayName);
      end;

Johnny Bravo 21. Jun 2008 22:21

Re: Probleme mit Listbox Einträgen
 
Danke, für den überarbeiteten code.
Allerdings wird immernoch der Fehler bei Bereichsprüfung immernoch angezeigt, und zwar:

Delphi-Quellcode:
begin
if Err <=0 then

ShowMessage(MeinArray[lIndex].RealFileName); //nur zur Kontrolle - lass ich das weg, geht der fehler eine zeile tiefer.
ShellExecute(Application.Handle,
      'open',
      Pchar(MeinArray[lIndex].RealFileName),
      NIL,
      NIL,
      SW_SHOWNORMAL);
Shellexecute ist auf Form2, genauso wie die listbox.
Auf Form 4 befindet sich das Editfeld, in dem der Alternativnamen eingegeben und in die Listbox geladen wird.
Wenn man auf Ok klickt, wird halt der Code von Deddy H ausgeführt, der die Eingaben nach Form2 weiterleitet.Deswegen war eben von Form4 die rede, weil hier die ganzen befehle zum steueren der Listbox stattfinden.

DeddyH 21. Jun 2008 22:22

Re: Probleme mit Listbox Einträgen
 
Nochmal: lIndex ist nicht initialisiert!

Johnny Bravo 21. Jun 2008 22:28

Re: Probleme mit Listbox Einträgen
 
hm. komischerweise bekomme ich jetzt angezeigt das die nicht initialisiert wurde. eben hab ich die fehlermeldung nicht gehabt.... :?:

DeddyH 21. Jun 2008 22:34

Re: Probleme mit Listbox Einträgen
 
*Piiiiiiiiiiiiiiieeeepppp*... *schnauf*

Tu uns beiden mal einen Gefallen und füge direkt hinter dem begin diese beiden Zeilen ein:
Delphi-Quellcode:
lIndex := Form2.ListBox1.ItemIndex;
if lIndex < 0 then exit;

Johnny Bravo 21. Jun 2008 22:37

Re: Probleme mit Listbox Einträgen
 
hab ich auch schon versucht. bringt leider nichts, habs auch schon mit
Delphi-Quellcode:
lIndex := Length(MeinArray);
versucht, ebenso wenig erfolg.

haentschman 21. Jun 2008 22:37

Re: Probleme mit Listbox Einträgen
 
[OT]
Zitat:

*Piiiiiiiiiiiiiiieeeepppp*... *schnauf*
...mit bildlichem Vorstellungsvermögen kommt das gut... :mrgreen:
[/OT]

DeddyH 21. Jun 2008 22:39

Re: Probleme mit Listbox Einträgen
 
[OT] Der *Piep*-Button sollte eigentlich ein Scherz sein, aber langsam könnte ich mich mit dem Gedanken anfreunden :mrgreen: [/OT]

[edit] @Johnny Bravo: nun nochmal im Ganzen die Methode zum Aufruf, damit wir endlich mal fertig werden [/edit]

Johnny Bravo 21. Jun 2008 22:47

Re: Probleme mit Listbox Einträgen
 
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);

function ShellExecuteErrMessage(int_Code: INTEGER): String;

begin
  case int_code of
     0: result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig';
     2: result := 'Datei wurde nicht gefunden.';
     3: result := 'Verzeichnis wurde nicht gefunden.';
     5: result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.';
     6: result := 'Bibliothek forderte separate Datensegmente für jede Task an.';
     8: result := 'Zuwenig Speicher, um die Anwendung zu starten.';
    10: result := 'Falsche Windows-Version.';
    11: result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.';
    12: result := 'Anwendung für ein anderes Betriebssystem.';
    13: result := 'Anwendung für MS-DOS 4.0.';
    14: result := 'Typ der ausführbaren Datei unbekannt.';
    15: result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.';
    16: result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.';
    19: result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.';
    20: result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.';
  else
    result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(int_code) + ')';
  end;
end;

begin
 lIndex := Form2.ListBox1.ItemIndex;
if lIndex < 0 then exit;

if Err <=0 then
begin

ShowMessage(MeinArray[lIndex].RealFileName); //nur zur Kontrolle
ShellExecute(Application.Handle,
      'open',
      Pchar(MeinArray[lIndex].RealFileName),
      NIL,
      NIL,
      SW_SHOWNORMAL);
end;

  if Err < 33 then
    Showmessage(ShellExecuteErrMessage(Err));
    if CheckBox2.Checked then
     Application.Minimize;

  end;

DeddyH 21. Jun 2008 22:56

Re: Probleme mit Listbox Einträgen
 
Kannst Du mir mal erklären, wieso das schon wieder verkehrt herum da steht? Letzter Versuch:
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);

function ShellExecuteErrMessage(int_Code: INTEGER): String;

begin
  case int_code of
     0: result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig';
     2: result := 'Datei wurde nicht gefunden.';
     3: result := 'Verzeichnis wurde nicht gefunden.';
     5: result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.';
     6: result := 'Bibliothek forderte separate Datensegmente für jede Task an.';
     8: result := 'Zuwenig Speicher, um die Anwendung zu starten.';
    10: result := 'Falsche Windows-Version.';
    11: result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.';
    12: result := 'Anwendung für ein anderes Betriebssystem.';
    13: result := 'Anwendung für MS-DOS 4.0.';
    14: result := 'Typ der ausführbaren Datei unbekannt.';
    15: result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.';
    16: result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.';
    19: result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.';
    20: result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.';
  else
    result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(int_code) + ')';
  end;
end;

begin
  lIndex := ListBox1.ItemIndex;
  if lIndex < 0 then exit;

//if Err <=0 then wo soll der Wert denn bitteschön herkommen?
//begin

  ShowMessage(MeinArray[lIndex].RealFileName); //nur zur Kontrolle
  Err := ShellExecute(Application.Handle,
      'open',
      Pchar(MeinArray[lIndex].RealFileName),
      NIL,
      NIL,
      SW_SHOWNORMAL);
//end;

  if Err < 33 then
    Showmessage(ShellExecuteErrMessage(Err));
    if CheckBox2.Checked then
     Application.Minimize;

end;

Johnny Bravo 21. Jun 2008 23:04

Re: Probleme mit Listbox Einträgen
 
das hatte ich eben testweise geschrieben, hab vergessen das zu löschen.

Es klappt leider immer noch nicht, die Showmessage bekomme ich auch nicht angezeigt... :wall:

Danke für deine geduld und hilfsbereitschaft.

DeddyH 21. Jun 2008 23:05

Re: Probleme mit Listbox Einträgen
 
Hast Du mal einen Breakpoint gesetzt?

Johnny Bravo 21. Jun 2008 23:12

Re: Probleme mit Listbox Einträgen
 
Delphi-Quellcode:
[...]
       Err := ShellExecute(Form2.Handle,
         [...}
da hab ich den breakpoint gesetzt, und da wird mir auch angezeigt das da etwas nicht stimmt.

DeddyH 21. Jun 2008 23:14

Re: Probleme mit Listbox Einträgen
 
Und wenn Du mal self.Handle einträgst?

Johnny Bravo 21. Jun 2008 23:15

Re: Probleme mit Listbox Einträgen
 
nichts.
self.Handle, Form2.Handle, und Application.Handle haben nichts gebracht....

DeddyH 21. Jun 2008 23:16

Re: Probleme mit Listbox Einträgen
 
Was wird Dir denn angezeigt? Lass Dir doch nicht alles aus der Nase ziehen.

Die Muhkuh 21. Jun 2008 23:18

Re: Probleme mit Listbox Einträgen
 
Zitat:

Zitat von Johnny Bravo
und da wird mir auch angezeigt das da etwas nicht stimmt.

:glaskugel:

Johnny Bravo 21. Jun 2008 23:20

Re: Probleme mit Listbox Einträgen
 
es wird dasselbe wie seit 2 seiten zuvor angezeigt: "Fehler bei Bereichsprüfung". bei
Delphi-Quellcode:
Err := ShellExecute(Form2.Handle,
hab auch schon einfach nur
Delphi-Quellcode:
 ShellExecute(Form2.Handle,
versucht...ebenfalls ein schuß in den ofen, mit o.g. Fehlermeldung.

Dachte das hätte ich schon of genug geschrieben..... :mrgreen:

EDIT:
Mit Breakpoint hab ich eine ebenso "verständliche" fehlermeldung:

"Quelltexthaltepunkt bei s0048C2F2 C:\Test.pas Zeile 157 Prozess Test.exe (2904)"

Die Muhkuh 21. Jun 2008 23:23

Re: Probleme mit Listbox Einträgen
 
Wenn die Meldung kommt, bringt der Breakpoint sowieso nichts, da dieser nur beim Debuggen zur Geltung kommt.

DeddyH 21. Jun 2008 23:23

Re: Probleme mit Listbox Einträgen
 
Mal 'ne kleine Erweiterung:
Delphi-Quellcode:
  lIndex := ListBox1.ItemIndex;
  if lIndex < 0 then exit;
  if lIndex > High(MeinArray) then
    ShowMessage('Da haben wirs');

Johnny Bravo 21. Jun 2008 23:26

Re: Probleme mit Listbox Einträgen
 
mit deinem code öffnet sich ein ShowMessage Fenster. Sobald ich auf Ok klicke, erscheint wieder ein Fenster mit der Fehlermeldung.

Die Muhkuh 21. Jun 2008 23:28

Re: Probleme mit Listbox Einträgen
 
Dann ist der lIndex größer, als die vorhandene Anzahl der Elemente im Array. "Vergisst" Du, dass Array (MeinArray) zu aktualisieren?

DeddyH 21. Jun 2008 23:35

Re: Probleme mit Listbox Einträgen
 
Naja, zumindest wissen wir jetzt endlich, was es ist. Ich gehe jetzt gleich ins Bett, schauen wir morgen (nee, heute) Morgen nochmal drüber.

Die Muhkuh 21. Jun 2008 23:37

Re: Probleme mit Listbox Einträgen
 
Mach nicht so, als ob die halbe DP einbricht, wenn Du ins Bett musst :tongue:

Johnny Bravo 21. Jun 2008 23:39

Re: Probleme mit Listbox Einträgen
 
Jungs,ich danke euch für eure geduld und für eure hilfe, hoffe ihr seid mir nicht böse :cyclops:

Ich arbeite zum ersten mal mit einem Array und habe nicht die geringste ahnung wie ich das tun soll. :|

DeddyH 21. Jun 2008 23:40

Re: Probleme mit Listbox Einträgen
 
[OT] Manuel, *piep* mich am *piep*, Du *piep* :tongue: [/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Seite 2 von 3     12 3      

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