AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Listbox Einträgen

Ein Thema von Johnny Bravo · begonnen am 18. Jun 2008 · letzter Beitrag vom 2. Jul 2008
Antwort Antwort
Seite 1 von 12  1 2311     Letzte »    
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#1

Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 17:49
Hi,

Per Button öffne ich einen OpenDialog, in dem man *.exe auswählen kann.
Wenn man dann auf Ok klickt, öffnet sich ein 2tes Formular, in dem man einen Namen für die *.exe eingeben kann.
Dieser Name wird dann in die ListBox eingefügt.
Wenn ich dann das Item in der Listbox per ShellExecute starten will, gehts Logischerweise nicht, da Shellexecute versucht den Dateinamen aus dem OpenDialog als Pfad nimmt.

Nun meine Frage:

Wie kann ich unter der weiterverwendung von dem 2ten Formular, in dem man einen "Ersatznamen" für die *.exe eingibt das ausgewählte ListBox Item starten?
Also, das der "Ersatznamen" in der Listbox dann angezeigt wird, aber dazugehörige Pfad unsichtbar gespeichert wird.

Hinterher möchte ich die Kompletten ListBox Items und der jeweils dazugehörige Pfad in einer Datei speichern - das speichern der Items klappt bis jetzt.


Ich hoffe ihr versteht wie ich das meine, und ich hoffe ihr könnt mir ein bißchen helfen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 17:55
Die ListItems verfügen auch über eine Eigenschaft Objects. Da könntest Du den Originalnamen ablegen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 17:56
entweder packst du in die Listbox beide Namen hintereinander und sorgst selber für das Zeichnen der Listbox so das nur der eine Name dann auch gemalt wird oder:
Zitat:
Also, das der "Ersatznamen" in der Listbox dann angezeigt wird, aber dazugehörige Pfad unsichtbar gespeichert wird.
Also den dazugehörigen Pfad in einem Array, einer Liste etc. speichern.
Zudem ist es üblich die Daten komplett im nicht sichtbaren Bereich zu halten und diese nur für die Anzeige in das entsprechende Anzeigeelement zu übertragen.
In deinem Fall also komplettenPfad und Ersatzname in einer Liste oder einem Array ablegen und dann den Ersatznamen in die Listbox einfügen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#4

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 18:41
Danke schonmal für die Antworten,

mit folgendem Code würde ich das Programm aus der ListBox laden:

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;

var
  Err: Integer;
begin
      if ListBox1.ItemIndex > -1 then
  Err:= ShellExecute(0,
               Nil,
               PChar(ListBox1.Items[ListBox1.ItemIndex]),
               Pchar(Edit1.Text),
               SW_NORMAL);

  if Err <= 32 then
      Showmessage(ShellExecuteErrMessage(Err));
end;

nach dem eine Datei ausgewählt wurde, öffnet sich folgendes Formular:

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
    var IconIndex : Integer;
    h : hIcon;
    S : String;
    Icon : TIcon;
    Bitmap : TBitmap;
    OpenDialog : TOpenDialog;
 begin
         Form2.ListBox1.MultiSelect :=False;
         Form2.ListBox1.Sorted :=True;
         Form2.Label2.Caption := OpenDialog.FileName;
        begin
          Icon := TIcon.Create;
          IconIndex := 0;
          S := OpenDialog.FileName;
          h := IconFromFile(OpenDialog.FileName,0);
          Form2.ImageList1.AddIcon (Icon);
        try
          Form2.ImageList1.GetIcon(0, Icon);
          Form2.Image1.Canvas.Draw(0, 0, Icon);
          with Form2.Image1.Canvas Do
          DrawIconEx(Handle, 0, 0,h, 32, 32, 0, Brush.Handle, di_Normal);
        begin
          Form2.ListBox1.Items.Add (Edit1.Text); // der inhalt aus edit1 wird in die listbox geladen, also der "Ersatzname"
          Form4.Close;
          Edit1.Clear;
          end;
        finally
          FreeAndNil(Icon);
    end;
 end;

 end;
Könntet ihr mir ein Beispiel mit den ListItem.Objects oder dem Array geben?
Hab gerade schwierigkeiten das umzusetzen und zu realisieren....
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 19:23
Delphi-Quellcode:
type
  TFilenameInfos = record
    RealFileName: String;
    DisplayName: String;
  end;
[...]
  private
    MeinArray: Array of TFilenameInfos;
[...]

var
  lIndex: Integer;
begin
  if OpenDialog1.Execute() then
  begin
    lIndex := Length(MeinArray);
    //Zeige Form für alternativen Dateinamen
    SetLength(MeinArray, lIndex + 1);
    MeinArray[lIndex].RealFileName := OpenDialog1.FileName;
    MeinArray[lIndex].DisplayName := NameAusForm2;
    ListBox1.Items.Add(MeinArray[lIndex].DisplayName);
  end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#6

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 21:45
Hi, hab deinen Code meinem entsprechend angepasst. Es wird zwar kompiliert, doch wenn ich das Programm starten will (das aus der Listbox) gibts eine Zugriffsverletzung...

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;

var
  Err: Integer;
  lIndex: Integer;
begin
  if OpenDialog1.Execute() then
  begin
    lIndex := Length(MeinArray);
    SetLength(MeinArray, lIndex + 1);
    MeinArray[lIndex].RealFileName := OpenDialog1.FileName;
    MeinArray[lIndex].DisplayName := Form4.Edit1.Text;
    ListBox1.Items.Add(MeinArray[lIndex].DisplayName);
  end;


  if Err <= 32 then
      Showmessage(ShellExecuteErrMessage(Err));
  if FileExists (OpenDialog2.FileName) then

begin
   if CheckBox2.Checked then
      Application.Minimize;
    end;
end;
was hab ich falsch gemacht?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 22:16
Könntest du bitte die vollständige Fehlermeldung posten und angeben bei welcher Anweisung diese kommt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#8

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 22:30
natürlich.

Zitat:
Im Project Test1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung "Zugriffsverletzung bei Adresse 0048BE8E in Modul Test1.Exe". Lesen von Adresse 00000000 aufgetreten.
der fehler tritt bei
if OpenDialog1.Execute() then auf.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 22:39
Existiert den eine Instanz des Dialogs?
Markus Kinzler
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#10

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 23:15
habs so mal versucht:
Delphi-Quellcode:
var
  Err: Integer;
  lIndex: Integer;

  begin openDialog := TOpenDialog.Create(self);
     openDialog.InitialDir := GetCurrentDir;
     openDialog.Options := [ofFileMustExist];
     openDialog.Filter := 'Anwendungen|*.exe';
     openDialog.FilterIndex := 0;

  begin
  if OpenDialog1.Execute then
  begin
    lIndex := Length(MeinArray);
    SetLength(MeinArray, lIndex + 1);
    MeinArray[lIndex].RealFileName := OpenDialog1.FileName;
    MeinArray[lIndex].DisplayName := Form4.Edit1.Text;
    ListBox1.Items.Add(MeinArray[lIndex].DisplayName);
  end;
da bekomme ich in der selben zeile den selben fehler bei adresse 0048BEE1.....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 12  1 2311     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 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