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 Markierte Checklistbox Einträge kopieren (https://www.delphipraxis.net/25500-markierte-checklistbox-eintraege-kopieren.html)

sui 7. Jul 2004 16:36


Markierte Checklistbox Einträge kopieren
 
Moin,

ich lese mittels der Checklistbox den Inhalt eines Ordners ein.
Jetzt bräuchte ich das so, das ich Einträge markieren kann (Haken)
und dann werden die markierten in einen anderen Ordner kopiert.
Soll eine Art Backup-Auswahl werden.
Kann mir einer nen Anstoss geben?

Christian Seehase 7. Jul 2004 16:41

Re: Markierte Checklistbox Einträge kopieren
 
Moin Sui,

also wo jetzt genau Dein Problem liegt, hab' ich nicht ganz verstanden :gruebel:

Die Muhkuh 7. Jul 2004 16:44

Re: Markierte Checklistbox Einträge kopieren
 
@Chris


er will die Dateien die markiert sind in einen anderen Ordner kopieren. Nun möchte er wissen wie es geht.

sui 7. Jul 2004 16:47

Re: Markierte Checklistbox Einträge kopieren
 
Genau Spider...

Niko 7. Jul 2004 16:50

Re: Markierte Checklistbox Einträge kopieren
 
Hi,

eine Funktion zum Kopieren von Dateien findest du zum Beispiel hier.

MrKnogge 7. Jul 2004 16:55

Re: Markierte Checklistbox Einträge kopieren
 
Delphi-Quellcode:
for i := 0 to CheckListBox1.Count-1 do
  if CheckListBox1.Checked[i] then ...

MrKnogge 7. Jul 2004 16:59

Re: Markierte Checklistbox Einträge kopieren
 
Zitat:

Zitat von Niko
Hi,
eine Funktion zum Kopieren von Dateien findest du zum Beispiel hier.

CopyFile wäre wohl einfacher ...

Die Muhkuh 7. Jul 2004 17:05

Re: Markierte Checklistbox Einträge kopieren
 
Hi,


hier mal ein lauffähiges Beispiel:

Delphi-Quellcode:
var
  I : Integer;
  SL : TStringList;
begin
  SL := TStringList.Create;
  try
    for I := 0 to CheckListBox1.Count - 1 do
    begin
      if CheckListBox1.Checked[I] then
      begin
        SL.Add(CheckListBox1.Items.Strings[I]);
      end;
    end;
    for I := 0 to SL.Count - 1 do
    begin
      CopyFile(PChar(Sl.Strings[I]), PChar('C:\Test\' + ExtractFileName(Sl.Strings[I])), false);
    end;
  finally
    SL.Free;
  end;
Statt 'C:\Test\' musst du halt Edit1.Text oder so einfügen.

PS: Ist wahrscheinlich noch sehr unsauber, aber ein guter ansatzpunkt.

Die Muhkuh 7. Jul 2004 17:11

Re: Markierte Checklistbox Einträge kopieren
 
Hier nochmal gekürzt:

Delphi-Quellcode:
var
  I : Integer;
begin
  for I := 0 to CheckListBox1.Count - 1 do
  begin
    if CheckListBox1.Checked[I] then
    begin
      CopyFile(PChar(CheckListBox1.Items[I]), PChar('C:\Test\' +
                     ExtractFileName(CheckListBox1.Items[I])), false);
    end;
  end;
Auch hier wieder das 'C:\' entfernen

sui 7. Jul 2004 17:27

Re: Markierte Checklistbox Einträge kopieren
 
Code:
procedure TForm1.Button3Click(Sender: TObject);
var
  I : Integer;
  Pfad: string;
begin
  for I := 0 to CheckListBox1.Count - 1 do
  begin
    if CheckListBox1.Checked[I] then
    begin
    selectdirectory('Ordner wählen', '' ,Pfad);
    end;

    begin
      CopyFile(PChar(CheckListBox1.Items[I]), PChar('Pfad' +
                     ExtractFileName(CheckListBox1.Items[I])), false);
    end;
  end;
  end;
Lässt sich Compilieren, läuft auch, aber im ausgewählten Ordner kommt nix an.
Der bleibt einfach leer...

MrKnogge 7. Jul 2004 17:30

Re: Markierte Checklistbox Einträge kopieren
 
Du darfst das Pfad nicht in hochkomma nehmen...

sui 7. Jul 2004 17:37

Re: Markierte Checklistbox Einträge kopieren
 
Klappt auch nicht, ist auch nicht die wahre Lösung, meine Pfadangabe.
Wenn ich z.B. 10 Einträge markiert hab, fragt er mich auch 10 mal nach
dem Pfad.

Es wird immer noch nix kopiert, versteh das nicht.

Christian Seehase 7. Jul 2004 17:52

Re: Markierte Checklistbox Einträge kopieren
 
Moin Sui,

existiert der Zielpfad denn?
CopyFile legt keine Pfad an.

Wenn Du das SelectDirectory vor die Schleife packst, wird auch nur einmal gefragt.

Schau Dir doch auch mal (u.a. in unsere Codelib) SHFileOperation an.

Die Muhkuh 7. Jul 2004 18:04

Re: Markierte Checklistbox Einträge kopieren
 
Also bei mir funtzt des...

sui 7. Jul 2004 18:24

Re: Markierte Checklistbox Einträge kopieren
 
Den Zielpfad suche ich doch hiermit aus:

Code:
begin
    selectdirectory('Ordner wählen', '' ,Pfad);
und setz ihn hier bei dem Pfad wieder rein:

Code:
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad +
                     ExtractFileName(CheckListBox1.Items[I])), false);
Hab die Abfrage jetzt vor die Schleife gesetzt, fragt auch nur noch einmal, aber
kopieren tut er immer noch nix.

Die SHFileOperation ist zu kompliziert für sowas. Soweit bin ich noch lang nicht.

sui 7. Jul 2004 18:29

Re: Markierte Checklistbox Einträge kopieren
 
Es wär ja kein Problem, den Pfad gleich klartext hineinzuschreiben, aber
woher soll ich z.b. wissen, wie euer Pfad zum Desktop ist.
Bei mir ists C:/Dokumente und Einstellungen/sui/Desktop

Der Anmeldename ist ja das Problem, hier sui.

alcaeus 7. Jul 2004 18:32

Re: Markierte Checklistbox Einträge kopieren
 
Diese Ordner kannst du in der Registry finden:

HKLM\Software\Microsoft\Windows\CurrentVersion\Exp lorer\UserShellFolders

Greetz
alcaeus

Nikolas 7. Jul 2004 18:34

Re: Markierte Checklistbox Einträge kopieren
 
[ot] @ Sui: Benutz lieber die [delphi ]-Tags. Dann wird der Code wie in deinem Editor angezeigt.[/ot]

Die Muhkuh 7. Jul 2004 18:46

Re: Markierte Checklistbox Einträge kopieren
 
Moin sui,


lass dir mal per ShowMessage den Pfad ausgeben.

Delphi-Quellcode:
ShowMessage(Pfad)
und schau was drinne steht

sui 7. Jul 2004 18:55

Re: Markierte Checklistbox Einträge kopieren
 
Hab ich schon, im Label, genau der Pfad den ich auswähle ist drin im Pfad.
Ich bereite grad ein Beispiel vor, nur mit den wichtigsten Sachen.
Dann könnt ihr selber mal reinschauen.

sui 7. Jul 2004 19:11

Re: Markierte Checklistbox Einträge kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bitteschön, hier ist das Problemkind :wall:
Fragt jetzt bitte nicht über den Sinn des Proggs...

Wie gesagt, mit dem ersten Button wird eingelesen und mit dem
2. soll der Pfad gewählt werden und die markierten Dateien dorthin
verschoben werden.

Die Muhkuh 7. Jul 2004 19:31

Re: Markierte Checklistbox Einträge kopieren
 
[Fataler Fehler] Package 'elpackD7' wird benötigt, konnte aber nicht gefunden werden

Wat it dat denn?

sui 7. Jul 2004 19:32

Re: Markierte Checklistbox Einträge kopieren
 
Was macht dat denn dadrin??

Das sind Kompos, bunte Buttons und so.

Versteh ich jetzt net

Die Muhkuh 7. Jul 2004 19:35

Re: Markierte Checklistbox Einträge kopieren
 
Naja egal,

ich kann mir den Fehler denken!

Du schreibst:

Delphi-Quellcode:
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad),true);
Schreibs mal so:

Delphi-Quellcode:
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad + ExtractFileName(CheckListBox1.Items[I]), true);

Und wenn das nicht funtzt dann so:

CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad + '\' + ExtractFileName(CheckListBox1.Items[I]), true);

sui 7. Jul 2004 19:43

Re: Markierte Checklistbox Einträge kopieren
 
Hm,

Unit1.pas(82) ")" erwartet, aber "," gefunden

In den Uses muss nur die FileCtrl rein dazu, oder noch
was anderes, weil langsam glaub ich echt...

Die Muhkuh 7. Jul 2004 19:45

Re: Markierte Checklistbox Einträge kopieren
 
Hab ein Klammerzu vergessen:

Delphi-Quellcode:
 
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad + ExtractFileName(CheckListBox1.Items[I])), true);

sui 7. Jul 2004 19:49

Re: Markierte Checklistbox Einträge kopieren
 
Nix, immer noch keine Datei kopiert.

Die Muhkuh 7. Jul 2004 19:51

Re: Markierte Checklistbox Einträge kopieren
 
Hast du überhaupt irgendwo ein Häckchen drinne?

sui 7. Jul 2004 19:53

Re: Markierte Checklistbox Einträge kopieren
 
Türlich, mal eins, dann alle, dann wieder ein paar...
Sind die Dateien vielleicht geschützt oder so?
Wenn ich Cookies einstelle, klappts auch nicht. Woran könnt
es denn noch liegen das er nix ausser Pfad aufnehmen macht?

Die Muhkuh 7. Jul 2004 19:55

Re: Markierte Checklistbox Einträge kopieren
 
AH! Jetzt weiß ich es!


In meinem Beispiel gehe ich davon aus das nur Pfad angaben in der Checklistbox stehen! Häng das Projekt nochmal an ohne das komische Package da. Dann schreib ich dir morgen ein Beispiel!

sui 7. Jul 2004 19:59

Re: Markierte Checklistbox Einträge kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Aha...

Den Pfad der Dateien weiss ich ja, mal der Cookie-Ordner und der InternetCache-Ordner.

Aber das Prob ist ja wegen den Anmeldenamen, die sind in den 2 Pfaden ja immer anders.

Naja, vielen Dank für die Müh, hoffe dieses ElPack ist jetzt raus, hab Kompo runnergeworfen,
war eh ne Demo.

Niels 8. Jul 2004 21:42

Re: Markierte Checklistbox Einträge kopieren
 
Hi,
dein Problem liegt darin, dass du den Name, der in der CheckListBox steht als Quelle nimmst. Aber die Quelle ist ja ganz anders. Ich hab hierzu eine kleine Hilfsfunktion geschrieben. Diese sucht anhand des Namens in der CheckListBox nach dem Pfad inklusive Dateiname des Cookies:

Code:
// "Dateiname" ist der Name in der CheckListBox
function FindeItem(Dateiname: PAnsiChar): PAnsiChar;
var
  icei    : PINTERNETCACHEENTRYINFO;
  dwSize  : DWord;
  hSearch : DWord;
begin
  dwSize := 65536;
  icei   := AllocMem(dwSize);
  try
    hSearch := FindFirstURLCacheEntry(Dateiname,icei^,dwSize);
    if hSearch = 0 then
    begin
      ShowMessage(SysErrorMessage(GetLastError)+' '+IntToStr(dwSize));
      exit;
    end;
    if hSearch <> 0 then
    begin
      result := icei^.lpszLocalFileName;
    end;
  finally
    FreeMem(icei,65536);
  end;
end;
Den Kopiervorgang startest du nun mit folgendem Befehl:

Code:
CopyFile(FindeItem(PChar(Form1.CheckListBox1.Items[i])), PChar(Pfad + ExtractFileName(FindeItem(PChar(Form1.CheckListBox1.Items[i])))), true);
Eigentlich ist es ineffizient FindeItem 2x aufzurufen. Ich hab aber versucht den result in ner Variable zu speichern und da hat mir ExtractFileName nur den Anfang des Namens kopiert (kann daran liegen, dass mein Windows-Benutzername aus 2 Wörtern besteht).

Ich hoffe das hilft dir weiter. Auf jeden Fall sollte es so funktionieren.


mfG Niels :thuimb:


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