![]() |
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? |
Re: Markierte Checklistbox Einträge kopieren
Moin Sui,
also wo jetzt genau Dein Problem liegt, hab' ich nicht ganz verstanden :gruebel: |
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. |
Re: Markierte Checklistbox Einträge kopieren
Genau Spider...
|
Re: Markierte Checklistbox Einträge kopieren
|
Re: Markierte Checklistbox Einträge kopieren
Delphi-Quellcode:
for i := 0 to CheckListBox1.Count-1 do
if CheckListBox1.Checked[i] then ... |
Re: Markierte Checklistbox Einträge kopieren
Zitat:
|
Re: Markierte Checklistbox Einträge kopieren
Hi,
hier mal ein lauffähiges Beispiel:
Delphi-Quellcode:
Statt 'C:\Test\' musst du halt Edit1.Text oder so einfügen.
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; PS: Ist wahrscheinlich noch sehr unsauber, aber ein guter ansatzpunkt. |
Re: Markierte Checklistbox Einträge kopieren
Hier nochmal gekürzt:
Delphi-Quellcode:
Auch hier wieder das 'C:\' entfernen
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; |
Re: Markierte Checklistbox Einträge kopieren
Code:
Lässt sich Compilieren, läuft auch, aber im ausgewählten Ordner kommt nix an.
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; Der bleibt einfach leer... |
Re: Markierte Checklistbox Einträge kopieren
Du darfst das Pfad nicht in hochkomma nehmen...
|
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. |
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. |
Re: Markierte Checklistbox Einträge kopieren
Also bei mir funtzt des...
|
Re: Markierte Checklistbox Einträge kopieren
Den Zielpfad suche ich doch hiermit aus:
Code:
und setz ihn hier bei dem Pfad wieder rein:
begin
selectdirectory('Ordner wählen', '' ,Pfad);
Code:
Hab die Abfrage jetzt vor die Schleife gesetzt, fragt auch nur noch einmal, aber
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad +
ExtractFileName(CheckListBox1.Items[I])), false); kopieren tut er immer noch nix. Die SHFileOperation ist zu kompliziert für sowas. Soweit bin ich noch lang nicht. |
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. |
Re: Markierte Checklistbox Einträge kopieren
Diese Ordner kannst du in der Registry finden:
HKLM\Software\Microsoft\Windows\CurrentVersion\Exp lorer\UserShellFolders Greetz alcaeus |
Re: Markierte Checklistbox Einträge kopieren
[ot] @ Sui: Benutz lieber die [delphi ]-Tags. Dann wird der Code wie in deinem Editor angezeigt.[/ot]
|
Re: Markierte Checklistbox Einträge kopieren
Moin sui,
lass dir mal per ShowMessage den Pfad ausgeben.
Delphi-Quellcode:
und schau was drinne steht
ShowMessage(Pfad)
|
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. |
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. |
Re: Markierte Checklistbox Einträge kopieren
[Fataler Fehler] Package 'elpackD7' wird benötigt, konnte aber nicht gefunden werden
Wat it dat denn? |
Re: Markierte Checklistbox Einträge kopieren
Was macht dat denn dadrin??
Das sind Kompos, bunte Buttons und so. Versteh ich jetzt net |
Re: Markierte Checklistbox Einträge kopieren
Naja egal,
ich kann mir den Fehler denken! Du schreibst:
Delphi-Quellcode:
Schreibs mal so:
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad),true);
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); |
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... |
Re: Markierte Checklistbox Einträge kopieren
Hab ein Klammerzu vergessen:
Delphi-Quellcode:
CopyFile(PChar(CheckListBox1.Items[I]), PChar(Pfad + ExtractFileName(CheckListBox1.Items[I])), true); |
Re: Markierte Checklistbox Einträge kopieren
Nix, immer noch keine Datei kopiert.
|
Re: Markierte Checklistbox Einträge kopieren
Hast du überhaupt irgendwo ein Häckchen drinne?
|
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? |
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! |
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. |
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:
Den Kopiervorgang startest du nun mit folgendem Befehl:
// "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;
Code:
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).
CopyFile(FindeItem(PChar(Form1.CheckListBox1.Items[i])), PChar(Pfad + ExtractFileName(FindeItem(PChar(Form1.CheckListBox1.Items[i])))), true);
Ich hoffe das hilft dir weiter. Auf jeden Fall sollte es so funktionieren. mfG Niels :thuimb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 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