Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listbox Speichern, + Listbox und Shellexecute (https://www.delphipraxis.net/39439-listbox-speichern-listbox-und-shellexecute.html)

killerkarl 2. Feb 2005 17:57


Listbox Speichern, + Listbox und Shellexecute
 
moin
Also ich habe zwei Probleme:

Wenn ich in eienr Listbox Items wie
C:\Programme\test.exe
d:\Docs\test.doc

Stehen habe und die Listbox abspeichern möchte ist das nciht möglich.
Weiss jemand, wieih das lösen könnte?

Ob Listbox oder TMemo oder TRich is mir egal.

Zweites Problem:
Habe ich dann die Pfade in der Datei (durch manuelles reinschreiben) läd er die Dateien zwar in die Listbox, aber er führt es nciht aus. weil er Ein anderes Format braucht (als String).

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
if fileexists('conf.cfg') then Listbox1.Items.LoadFromFile('conf.cfg');
end;

procedure TForm1.FormShow(Sender: TObject);
var i:Integer;
begin
for i:=0 to Listbox1.Items.count-1 do
begin
Shellexecute(Handle, nil, Listbox1.Items.Strings[i], nil, nil, SW_SHOW);
end;
close;
end;
Freue mich über jede hilfe

Rastaman 2. Feb 2005 18:07

Re: Listbox Speichern, + Listbox und Shellexecute
 
Delphi-Quellcode:
Shellexecute(Handle, nil, PChar(Listbox1.Items.Strings[i]), nil, nil, SW_SHOW);

killerkarl 2. Feb 2005 18:09

Re: Listbox Speichern, + Listbox und Shellexecute
 
Danke für zweitens..
Fehlt nur nch erstens

Sharky 2. Feb 2005 18:10

Re: Listbox Speichern, + Listbox und Shellexecute
 
Hai killerkarl,

bitte nur eine Frage pro Thread ;-)

bzgl. deines ShellExecute-Problemes -> Ändere es mal in diesen Aufruf:
Delphi-Quellcode:
    Shellexecute(Handle, nil,PAnsiChar(Listbox1.Items.Strings[i]), nil, nil, SW_SHOW);
Was mir aber noch nicht klar ist was das Programm machen soll. Es sieht so aus als wolltest Du damit einfach nur eine Reihe von Programmen starten bzw. Dateien öffnen und es dann automatisch wieder beenden lassen.
Dafür brauchst Du aber doch keine solche Anwendung.

killerkarl 2. Feb 2005 18:13

Re: Listbox Speichern, + Listbox und Shellexecute
 
Also ich möchte ein Programm haben, das sich manuell starten lässt oder mit Windows und dann vorher festgelegte Programme öffnet, und sich dann wieder schlieest

jfheins 2. Feb 2005 18:26

Re: Listbox Speichern, + Listbox und Shellexecute
 
Wenn es einfach nur das tun muss, reicht folgendes:
Delphi-Quellcode:
program Project1;

uses
  Forms, ShellAPI, Windows;

var
 i: Cardinal;
 Programme: Array[0..2] of String = ('notepad', 'calc', 'iexplore');

{$R *.res}

begin
  Application.Initialize;
  Application.Run;

for i := 0 to high (Programme) do
  Shellexecute(Application.Handle, nil, PChar(Programme[i]), nil, nil, SW_SHOW);

end.

killerkarl 2. Feb 2005 18:29

Re: Listbox Speichern, + Listbox und Shellexecute
 
Ja, das wäre schon möglich, nur ich hätte halt gerne ein Config Programm, und ein Programm, das sich selber schliesst für den Autostart.
Ich muss halt nur die Pfade übergeben können.

Sharky 2. Feb 2005 18:30

Re: Listbox Speichern, + Listbox und Shellexecute
 
Zitat:

Zitat von killerkarl
Also ich möchte ein Programm haben, das sich manuell starten lässt...

Aber dafür brauchst Du keine visuellen Objekte (TForm, TListBox).
Delphi-Quellcode:
program Project1;

uses
  SysUtils,
  ShellApi,
  Windows,
  Classes;

  {$R *.res}

var
 sl : TStringList;
 i : Integer;
 datei : String;
begin
  datei := ExtractFilePath(ParamStr(0)) + 'test.cfg';
  if FileExists (datei) then
  begin
    sl := TStringList.Create;
    try
      sl.LoadFromFile(datei);
      for i:=0 to Pred(sl.count) do
      begin
        Shellexecute(0, nil,PAnsiChar(sl.Strings[i]), nil, nil, SW_SHOW);
       end;
    finally
      sl.free;
    end;
  end;
end.
[Edit]Die Konfigurationsdatei kannst Du ja mit einem zweiten Programm bearbeiten.

Binärbaum 3. Feb 2005 12:36

Re: Listbox Speichern, + Listbox und Shellexecute
 
Zitat:

Zitat von jfheins
Wenn es einfach nur das tun muss, reicht folgendes:
Delphi-Quellcode:
program Project1;

uses
  Forms, ShellAPI, Windows;

var
 i: Cardinal;
 Programme: Array[0..2] of String = ('notepad', 'calc', 'iexplore');

{$R *.res}

begin
  Application.Initialize;
  Application.Run;

for i := 0 to high (Programme) do
  Shellexecute(Application.Handle, nil, PChar(Programme[i]), nil, nil, SW_SHOW);

end.

Für diesen Zweck würde doch auch eine einfache Konsolen-Anwendung reichen. Dann spart man Ressourcen ein und der Programmstart dauert nicht so lange, wie bei einer "richtigen" Anwendung.
Also in etwa so:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
   ShellAPI, Windows;

var
 i: Cardinal;
 Programme: Array[0..2] of String = ('notepad', 'calc', 'iexplore');

begin
 for i := 0 to high (Programme) do
  Shellexecute(0, nil, PChar(Programme[i]), nil, nil, SW_SHOW);
end.
MfG
Binärbaum

killerkarl 3. Feb 2005 15:24

Re: Listbox Speichern, + Listbox und Shellexecute
 
Ja, danke für die vielen antworten, aber das Problem ist die Bearbeitung der Config Datein...
Der rest ist kein problem..
Wenn man in dem Programm die Programme auswählt, die gestartet werden sollen, weiss ich cniht, wie ich die abspeichere.

Binärbaum 3. Feb 2005 15:36

Re: Listbox Speichern, + Listbox und Shellexecute
 
Zitat:

Zitat von killerkarl
Ja, danke für die vielen antworten, aber das Problem ist die Bearbeitung der Config Datein...
Der rest ist kein problem..
Wenn man in dem Programm die Programme auswählt, die gestartet werden sollen, weiss ich cniht, wie ich die abspeichere.

Vielleicht kann man das mit einer StringList machen, in der die Pfade der zu startenden Anwendungen stehen, und die dann in einer Textdatei speichern. (Und zum Editieren aus der Textdatei in ein Memo o.ä. laden.)

MfG
Binärbaum

killerkarl 3. Feb 2005 15:45

Re: Listbox Speichern, + Listbox und Shellexecute
 
nur, wie speichere ich eine String Liste?
Combobox ist ja ne String Liste z.B.

Binärbaum 3. Feb 2005 15:51

Re: Listbox Speichern, + Listbox und Shellexecute
 
Steht im Prinzip schon oben im Beitrag von Sharky:

Delphi-Quellcode:
var sl: TStringlist;
...
  sl.LoadFromFile('C:\Ordner\test.cfg');//Laden

  sl.SaveToFile('C:\Ordner\test.cfg');//Speichern
MfG
Binärbaum

killerkarl 3. Feb 2005 16:26

Re: Listbox Speichern, + Listbox und Shellexecute
 
So, ich glaube jetzt habe ich mein Problem gefunden..
Wenn ich am anfang die listbox aus einer Datei auslese kann ich sie abspeichern..
Nur sobal ich etwas verändere kann ich sie nciht mehr speichern.
Weiss jemand da weiter?
Ich könnte zur Not auch ma ldas Projekt verschicken.

Egal ob ich vorher die Listbox in eine StringListe schreibe oder die Listbox speichere

Binärbaum 3. Feb 2005 16:36

Re: Listbox Speichern, + Listbox und Shellexecute
 
Kannst du die ListBox nicht mit
Delphi-Quellcode:
ListBox1.Items.SaveToFile('C:\Ordner\test.cfg');
abspeichern? Das müsste doch gehen (dann braucht man eigentlich auch keine zusätzliche StringList).

//Edit: Rechtschreibung ausgebessert

killerkarl 3. Feb 2005 16:44

Re: Listbox Speichern, + Listbox und Shellexecute
 
Dachte ich auch.. auber aus irgendwelchen Gründen tut er das nicht..

Binärbaum 3. Feb 2005 16:47

Re: Listbox Speichern, + Listbox und Shellexecute
 
Was heißt, "tut er nicht"?
Kommt eine Exception (wenn ja: Welche)? Oder ist die Datei einfach leer, oder steht nur irgendwelches wirres Zeug in der Datei, oder...

killerkarl 3. Feb 2005 16:52

Re: Listbox Speichern, + Listbox und Shellexecute
 
er erstellt einfach keine Datei...

Binärbaum 3. Feb 2005 16:58

Re: Listbox Speichern, + Listbox und Shellexecute
 
Hmmmm, ...
Das könnte verschiedene Ursachen haben, z.B. das man keine Zugriffsberechtigung für die Datei (bzw. das Verzeichnis) hat, oder (was ich nicht glaube) dass der Datenträger voll ist und nicht mehr genug Speicher zur Verfügung steht.
Es könnte aber auch "progammiertechnische" Ursachen haben:
Wird das Speichern z.B. in einer if-Anweisung gekapselt, kann es sein, dass durch einen Logik-Fehler die Anweisung (d.h. Speichern) niemals ausgeführt wird. Oder die Ereignisprozedur, in der das Speichern geschehen soll wird nie aufgerufen, weil das zugehörige Ereignis nicht ausgelöst wird. Oder...
Das ist wirklich schwierig zu sagen, woran es liegt. Ging es denn vorher?
Falls ja: was hast du seitdem am Quelltext geändert?

killerkarl 3. Feb 2005 17:08

Re: Listbox Speichern, + Listbox und Shellexecute
 
Ich schließe alles aus, denn wenn ich nichts verändere in der Listbox speichert das Porgramm sie ab, wenn ich etwas veränder z.B. hinzufüge und wieder lösche, sodass die datei gleich aussieht speichert es es nicht.

Binärbaum 3. Feb 2005 17:13

Re: Listbox Speichern, + Listbox und Shellexecute
 
Tja, da wäre etwas Quellcode schon nützlich, um das Problem zu beheben. Sonst kann man da auch nur Vermutungen anstellen.

MfG
Binärbaum

killerkarl 3. Feb 2005 17:43

Re: Listbox Speichern, + Listbox und Shellexecute
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
if fileexists('conf.cfg') then Listbox1.Items.LoadFromFile('conf.cfg');
end;

procedure TForm1.HinzuClick(Sender: TObject);
begin
if opendialog1.execute then Listbox1.Items.Add(Opendialog1.FileName);
end;

procedure TForm1.loescheClick(Sender: TObject);
begin
Listbox1.Items.Delete(Listbox1.Itemindex);
end;

procedure TForm1.SaveClick(Sender: TObject);
begin
listbox1.Items.SaveToFile('t.cfg'); //Um zu testen ob er die Datei schreibt, wenn ich nichts verändere.
end;

procedure TForm1.ResetClick(Sender: TObject);
begin
if fileexists('conf.cfg') then Listbox1.Items.LoadFromFile('conf.cfg')
else Listbox1.Clear;
end;

Binärbaum 3. Feb 2005 18:03

Re: Listbox Speichern, + Listbox und Shellexecute
 
Also ich kann da keinen Fehler entdecken. Das einzige Problem, das auftauchen könnte, ist in der Zeile
Delphi-Quellcode:
Listbox1.Items.Delete(Listbox1.Itemindex);
Dort könnte ItemIndex kleiner als null sein (was evtl. am Anfang der Fall sein kann, da der Vorgabewert -1 ist). Wenn man dann versucht diesen (nicht vorhandenen) Eintrag aus der ListBox zu löschen, könnte evtl. ein (interner) Fehler auftreten, der die ListBox dazu veranlasst, später nicht mehr richtig zu speichern.
Das ist aber auch nur eine Vermutung. Meines Erachtens enthält diese Stück Quelltext sonst keine Fehler.

MfG
Binärbaum

killerkarl 3. Feb 2005 20:38

Re: Listbox Speichern, + Listbox und Shellexecute
 
Naja, schade....
Das ist kein Fehler.. er löscht dann einfach nichts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.

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