Mit Drag and Drop Dateien laden, abarbeiten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von br_klaus »

Hallo, ich bin noch blutiger Anfänger in Lazarus (habe schon viel mit TP programmiert, ein wenig auch mit FPC). Ich habe Windows Vista 32bit. Möchte jetzt ein Programm schreiben, wo ich (Bild-)Dateien mit einer Maus in einem Verzeichnis anklicken und auswählen kann (geht das nur über den Windows Explorer oder kann man das auch intern programmieren?) und dann diese Dateien nacheinander mit einem Unterprogramm bearbeiten kann.
Es sollte aber auch möglich sein, mit Kommandozeile zu arbeiten. Nur wenn die leer ist, soll die Dateisuche beginnen.
Auch sollte es möglich sein, dieses Unterprogramm mit Tastenkombination aufzurufen.

Wenn mir da jemand behilflich sein kann, würde mich sehr freuen.
herzlichen Dank

Benutzeravatar
theo
Beiträge: 10941
Registriert: Mo 11. Sep 2006, 19:01

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von theo »

Hallo br_klaus
Kannst du deine Frage ein bisschen präzisieren und vor allem Schritt für Schritt formulieren?
So klingt es irgendwie nach "ich möchte alles, weiss aber nicht was". ;-)

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von Scotty »

Theo hat schon kritisiert, dass Deine Frage zu unspezifisch ist. Drag 'n Drop wird recht gut von Brian Long erklärt.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von carli »

br_klaus hat geschrieben: wo ich (Bild-)Dateien mit einer Maus in einem Verzeichnis anklicken und auswählen kann (geht das nur über den Windows Explorer oder kann man das auch intern programmieren?)
Kann man auch.
Ich weiß aber nicht, ob es fertige Komponenten dafür gibt. Falls nicht, kein Problem. Man nimmt einfach ein ListView, wo man die Dateien als Einträge einfügt und die Datei-Symbole über die WinAPI abfragt.
br_klaus hat geschrieben:Es sollte aber auch möglich sein, mit Kommandozeile zu arbeiten.
Einfach ein Edit-Feld anlegen und bei ENTER-Betätigung den Inhalt in einen TProcess stopfen und den ausführen.

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von br_klaus »

Herzlichen Dank für die raschen Antworten. V.a die Website von Brian Long gefällt mir gut. Ist aber sehr umfangreich. Muß mich da erst mal einarbeiten.

Was mir vorschwebt, ist:
Ich habe in einem Verzeichnis (z.B. C:\Bilder) mehrere Bilddateien.
Von diesen möchte ich einige auswählen (mit Ctrl + linker Maustaste: aktiv:=not aktiv),
dann mit ENTER die ausgewählten Dateien (deren Namen) auf eine Form ziehen (oder mit Drag and Drop).
Gewünschte Unterprograme und zugehörge Parameter auswählen (Auswahlfeld),
mit ENTER starten und damit nacheinander diese Bilddateien laden (Namen als PChar) und bearbeiten.
(Ich arbeite mit der Unit FreeImage, die gebraucht fast nur Zeigervariable.)

---------------------------------
carli hat geschrieben: Man nimmt einfach ein ListView, wo man die Dateien als Einträge einfügt und die Datei-Symbole über die WinAPI abfragt.
Und wie macht man das?
Wie kann man da Dateien als Einträge einfügen und dann über die WinAPI abfragen?

----------------------------------
carli hat geschrieben:Einfach ein Edit-Feld anlegen und bei ENTER-Betätigung den Inhalt in einen TProcess stopfen und den ausführen.
Wie geht das?
Ich dachte immer, mit Kommandozeile wird ein Programm automatisch gestartet, ohne ENTER eingeben zu müssen?


Wenn ich mehr Zeit habe, will ich versuchen, meine Frage noch näher zu spezifizieren.
Herzlichen Dank für alles!

br_klaus

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von shokwave »

br_klaus hat geschrieben:Was mir vorschwebt, ist:
Ich habe in einem Verzeichnis (z.B. C:\Bilder) mehrere Bilddateien.
Von diesen möchte ich einige auswählen (mit Ctrl + linker Maustaste: aktiv:=not aktiv),
dann mit ENTER die ausgewählten Dateien (deren Namen) auf eine Form ziehen (oder mit Drag and Drop).
Hast du dir schon mal den OpenPictureDialog angesehen?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    ListBox1.Items.AddStrings(OpenPictureDialog1.Files);
  end;
end;
Damit landen die Dateinamen in einer Listbox. Um mehrere Dateien auswählen zu können muss die Option ofAlowMultiSelect auf True.
br_klaus hat geschrieben:Gewünschte Unterprograme und zugehörge Parameter auswählen (Auswahlfeld),
mit ENTER starten und damit nacheinander diese Bilddateien laden (Namen als PChar) und bearbeiten.
:?: Was meinst du mit "Unterprogramm"? Ein anderes Programm? Dann wie gesagt TProcess. Oder meinst du nur eine Funktion in deinem Programm? Dann benutze einen Button und rufe die Funktion für alle Dateien im OnClick Ereignis auf.

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
begin
  for i:=0 to ListBox1.Items.Count-1 do
  begin
    MeineFunktion(ListBox1.Items.Strings[i]);
  end;
end;
Das mit dem ENTER scheint dir wichtig zu sein, oder? Wenn man die Eigenschaft Default eines Button auf True setzt führt er das OnClick-Ereignis aus, auch wenn eine andere Komponente den Fokus hat. Cancel macht das selbe mit ESC.
mfg Ingo

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von carli »

br_klaus hat geschrieben:
carli hat geschrieben: Man nimmt einfach ein ListView, wo man die Dateien als Einträge einfügt und die Datei-Symbole über die WinAPI abfragt.
Und wie macht man das?
Wie kann man da Dateien als Einträge einfügen und dann über die WinAPI abfragen?
Schau mal in der Bücherei deines Vertrauens nach dem Buch "Delphi 3 für Dummies", da sind so einige Kniffe erklärt (DragnDrop, PC runterfahren, Icons aus Windows etc.pp)

Die nötigen Funktionen dafür findest du hauptsächlich in der shell32 oder api32 oder wie auch immer die heißt (Autovervollst. hilft; vlt. ist auch alles in dei Unit windows gerutscht)

br_klaus hat geschrieben:
carli hat geschrieben:Einfach ein Edit-Feld anlegen und bei ENTER-Betätigung den Inhalt in einen TProcess stopfen und den ausführen.
Wie geht das?
Ich dachte immer, mit Kommandozeile wird ein Programm automatisch gestartet, ohne ENTER eingeben zu müssen?
du machst ein Edit-Feld, setzt das KeyPress-Ereignis auf:
- sollte key = #13 sein dann:
- setze key auf #0
- erstelle ein Objekt TProcess
- füttere das Objekt mit Ausführungsverzeichnis und dem Kommando
- rufe Execute auf
- lösche den Edit-Text (oder auch nicht)

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von br_klaus »

Herzlichen Dank!

Mit OpenPictureDialog, das hat geklappt. Habe nicht gewußt, daß es da die Option AllowMultiSelect gibt. Da habe ich jetzt noch eine Frage: Wenn ich in der TlistBox die Option MultiSelect aktiviere, dann kann ich auch in dieser Box mit Ctrl und CursorClick bestimmte Dateien auswählen. Aber wie kann ich dann auf diese zugreifen? Gibt es da ein bestimmtes Flag, das durch das Auswählen gesetzt wird?

Gibt es eine Zusammenstellung der verschiedenen Komponenten von Lazarus und deren Eigenschaften und Möglichkeiten, damit zu arbeiten (Demos)? Leider sitze ich im fernen Brasilien, sodaß ich keinerlei Möglichkeit habe, in einen Bücherladen zu gehen und mir da Bücher über Delphi 3 o.ä. zu besorgen (bin Priester in einem Kloster in der Nähe von Aparecida - falls da jemand Fragen hat über den Glauben o.ä., kann ich gerne Antwort geben: br-klaus@web.de).

Herzlichen Dank und Gottes Segen!

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von lrlr »

mit
for z := 0 to (listview.Items.Count - 1) do begin
if listview.Items[z].Selected then begin
....
end;
end;

usw. kannst das abfragen


OT:

unter listview.Items[z].Data kann man übrigens objecte mit "mehr info" speichern...

wobei aber virtualTreeView sowieso die bessere alternative wäre..

Benutzeravatar
theo
Beiträge: 10941
Registriert: Mo 11. Sep 2006, 19:01

Re: Mit Drag and Drop Dateien laden, abarbeiten

Beitrag von theo »

br_klaus hat geschrieben: Gibt es eine Zusammenstellung der verschiedenen Komponenten von Lazarus und deren Eigenschaften und Möglichkeiten, damit zu arbeiten (Demos)?
Es gibt die Examples im gleichnamigen Verzeichnis der Installation.
Es gibt die Doku: http://wiki.lazarus.freepascal.org/Laza ... ntation/de" onclick="window.open(this.href);return false;
Es gibt Online-Ressourcen für Delphi, die man z.T. übernehmen kann. z.B. http://www.delphi-treff.de/tutorials/" onclick="window.open(this.href);return false;
Ansonsten Google.

Antworten