Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
prof_hastig •->

Anmeldedatum: 29.01.2004 Beiträge: 9
|
Verfasst am: 29.01.2004 - 21:14 Titel: Drag&Drop innerhalb von ASStudio(Xcode) |
|
|
Hallo,
sitze gerade an meiner ersten ASS Application. Stehe for folgendem Problem:
Was für ein Item, muss ich wählen, wenn Benutzer innerhalb des Progs dateien in ein Fenster ziehen sollen und welchen eventHandler muss ich dann setzen?
Muss ich bei dem dazugehörenden Skript auch zusätzlich den Code benutzen, den ich bei einem Droplet benutze oder kann ich die Variable theObject direkt weiter verwursten?
Macht es in so einem Fall dann einen Unterschied, wenn ich 1 File(Datei oder Ordner) oder mehrer Files habe?
Danke für eure Hilfe
ph |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 30.01.2004 - 15:38 Titel: |
|
|
Hallo prof_hastig,
hast du dir das mitgelieferte Beispiel "Drag and Drop" schon angesehen?
In dem Beispiel werden folgende Items verwendet: table, button, ImageView, TextField
Du brauchst zumindest den "on drop" Handler. In allen Beispielscripten wird auch "on awake from nib" verwendet. Dort werden die Datentypen festgelegt, auf die das jeweilige Item reagieren soll.
Zitat: | Muss ich bei dem dazugehörenden Skript auch zusätzlich den Code benutzen, den ich bei einem Droplet benutze oder kann ich die Variable theObject direkt weiter verwursten? |
Solange du nur ein Item als "Drop-Zone" verwendest, dürfte die Verwendung von theObject kein Problem sein. Sobald mehrere Items dropable sind, könnte ich mir vorstellen, dass es zu Problemen kommen könnte.
Zitat: | Macht es in so einem Fall dann einen Unterschied, wenn ich 1 File(Datei oder Ordner) oder mehrer Files habe? |
Es wird immer eine Liste übergeben. Wenn du nur eine Datei drauf ziehst, enthält die Liste eben nur einen Eintrag. Du musst natürlich dafür sorgen, dass entweder nur das erste (gedroppte) Item verarbeitet wird oder - wo es Sinn macht - die ganze Liste abgearbeitet wird. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
prof_hastig •->

Anmeldedatum: 29.01.2004 Beiträge: 9
|
Verfasst am: 30.01.2004 - 15:56 Titel: |
|
|
Da hab ich ja ausreichend Material zum studieren ;-)
Eine Frage noch, macht es einen Unterschied(von der Anzahl der files abgesehen) ob es sich um files oder folders handelt, oder werden die gleich behandelt?
Vielen Dank
ph |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 30.01.2004 - 16:56 Titel: |
|
|
Files, Folder oder gar Volumes werden anscheinend alle gleich behandelt.
Im Beispiel-Script "Drag and Drop" hat es auf jeden Fall geklappt. Im Script selbst ist nirgends eine Überprüfung bzw. Unterscheidung zu sehen, also wird wohl erst gar kein Unterschied gemacht. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
prof_hastig •->

Anmeldedatum: 29.01.2004 Beiträge: 9
|
Verfasst am: 30.01.2004 - 16:58 Titel: |
|
|
Alles klar, vielen Dank
ph |
|
Nach oben |
|
 |
BleedingMoon •->

Anmeldedatum: 17.10.2004 Beiträge: 18
|
Verfasst am: 28.10.2004 - 13:36 Titel: |
|
|
Hallo zusammen,
ich hänge auch gerade bei einem Drag&Drop Problem.
Und zwar möchte ich es schaffen, dass man einen Ordner auf meine Applikation ziehen kann und dass danach der Ordner Pfad angezeigt wird und später mit dem Ordner eine bestimmte Aktion durchgeführt werden kann.
Das Drag&Drop-Beispiel hab ich mir angeschaut und auch teilweise übernommen.
Ich hab nun folgenden Code:
Code: |
on drop theObject drag info dragInfo
if "file names" is in types of pasteboard of dragInfo then
set theFiles to {}
set preferred type of pasteboard of dragInfo to "file names"
set theFiles to contents of pasteboard of dragInfo
repeat with theItem in theFiles
log (theItem)
set theItem to theItem as alias
chooseFolder(theItem)
end repeat
.... |
So, das Problem ist nun, dass ich bei log(theItem) den normalen Ordnerpfad angezeigt bekomme. DAs ist soweit OK. Wenn ich jetzt allerdings mit "theItem" eine Ordneraktion chooseFolder ausführen will, wird mir immer angezeigt, dass die Datei(!) nicht gefunden werden kann. Deshalb habe ich auch aus snows Tutorial die Zeile "set theItem to theItem as alias " übernommen, aber das geht auch nicht.
Das eigentliche Problem ist halt, dass ich leider noch nicht weiß, wie die Daten in "pasteboard" übergeben werden und wie man die genauer ansprechen kann.
Ich hoffe ich konnte mein Problem anschaulich erklären und dass mir jemand helfen kann.
Ach ja,
an der Methode chooseFolder liegt es nicht, da ich auch noch diesen Aufruf hier in meinem Programm verwende:
Code: |
set FileFolder to (choose folder)
chooseFolder(FileFolder)
|
Und da geht alles reibungslos
Naja zur Vollständigkeit halber, den chooseFolder inhalt noch:
Code: | on chooseFolder(selectedFolder)
set theFileList to selectedFolder as list
tell window "mainWindow"
set the contents of the text field "folderField" to selectedFolder
end tell
set noFolderChoosen to 0
end chooseFolder |
Mit theFileList arbeite ich später dann noch weiter. |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 28.10.2004 - 18:40 Titel: |
|
|
Sollen die Dateien bzw. Ordner auf das Programm-Icon gezogen werden? Dann bist du in diesem Thread falsch.
Hier geht es darum, Dateien oder Ordner auf ein Objekt des bereits geöffneten Programmfensters zu ziehen.
Falls es also darum geht, eine Droplet/Applet-Kombination zu erstellen, lies dir meinen gleichnamigen Workshop-Artikel durch. Du findest dort auch einen Link zu einem Beispiel-Projekt. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
BleedingMoon •->

Anmeldedatum: 17.10.2004 Beiträge: 18
|
Verfasst am: 28.10.2004 - 18:46 Titel: |
|
|
Hi Snow!
Ne, das Programm ist schon offen!
Es enthält ein Textfeld, in das man entweder per choose Folder den entsprechenden Ordner auswählen kann oder eben per Drag&Drop aus nem Finder-Fenster (also so ist es gedacht)
Eine Droplet/Applet-Applikation soll es also im Moment nicht darstellen.
Um vielleicht mein Problem genauer zu erklären:
Ich zieh in das bereits offene Programm einen Ordner und in der übergebenen pasteboard-Variablen (oder was weiß ich, was das genau ist)
steht auch der Pfad von diesem Ordner.
Nun kann ich allerdings NICHTS mehr mit diesem Wert anfangen, als ihn in das NStextfield zu schreiben. Wenn ich mit diesem Ordner "arbeiten" will kommt sofort immer die Meldung, dass der Ordner/Datei nicht gefunden werden kann.
Dabei hab ich schon versucht diesen Wert als string und als alias zu übergeben und was weiß ich, aber immer mit dem selben Ergebnis ;-( |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 28.10.2004 - 19:06 Titel: |
|
|
Ich habe mir eben nochmal das Droplet-Example angesehen. Wenn ich dort eine Datei oder einen Ordner in das 'Files'-Fenster ziehe, sind die dort angezeigten Pfade auch unvollständig.
Sie beginnen alle mit "/Users/....."
Wenn du so eine bescheidene Pfadangabe zu etwas Nützlichem machen willst, probiere mal folgendes:
-- folgende Zeile simuliert die chaotische Pfadübernahme
set Pfadtext to "/Users/snow/Desktop/Rechenspiel.app"
set derPfad to POSIX file Pfadtext
Das Ergebnis ist eine Referenz in der Form:
file "X Disk:Users:snow:Desktop:Rechenspiel.app" _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
BleedingMoon •->

Anmeldedatum: 17.10.2004 Beiträge: 18
|
Verfasst am: 28.10.2004 - 19:29 Titel: |
|
|
Danke für den Hinweis. Gleich bei mir eingebaut , doch allerdings bekomm ich dann genau bei dieser Zeile nen AppleSript-Fehler (CannotCreateScriptError irgendwas) (also ich will auch Ordner auswählen und nicht Dateien, falls es daran liegen sollte)
Und ich hab auch nochmal den Pfadwert angeguckt, wenn man zum Beispiel einen Ordner per "choose Folder" auswählt, da bekommt man dann auch einen Pfad in der "bescheidenen" Form raus. |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 28.10.2004 - 20:42 Titel: |
|
|
Versuche mal die unvollständige Pfadangabe mit 'as string' zuerst in einen normalen Textwert umzuwandeln. Ich nehme an, innerhalb der Table-Row ist das Unicode-Text. Evtl. führt dies zu dem Fehler.
Ich gebe zu, ich rate hier nur herum. AppleScript Studio habe ich vor zwei Jahren mal etwas ausprobiert - das war's dann auch schon.
Im Prinzip warte ich noch darauf, dass es so intuitiv nutzbar wird, wie es FaceSpan unter OS 9 war. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 28.10.2004 - 22:49 Titel: |
|
|
Habe gerade ein Testprojekt von mir gefunden, wo ich dieses Problem schon gelöst hatte.
Der einzige Unterschied, den ich entdecken konnte liegt im Drop-Handler:
repeat with theItem in theFiles
set theItem to (theItem as POSIX file) as string
set theDataRow to make new data row at end of data rows of theDataSource
set contents of data cell "files" of theDataRow to theItem
end repeat
So bekommst du die vollständigen Pfade in die jeweilige Reihe. Wenn du dann später eine Referenz brauchst, genügt es 'alias' vor diesen Wert zu setzen. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
BleedingMoon •->

Anmeldedatum: 17.10.2004 Beiträge: 18
|
Verfasst am: 31.10.2004 - 10:46 Titel: |
|
|
Hi!
Nach einigem hin und her hab ichs , dank deinem Vorschlag snow, doch noch hinbekommen. Das Umwandeln per/in "POSIX file" war des Rätsels Lösung.
Vielen Dank nochmal für die Antwort.
Jetzt müßte xCode nurnoch mein angegebenes icon übernehmen und dann wäre die App fertig, aber trotz mehrmaligem Neubooten will xCode das icon nicht übernehmen, obwohl bei "Application Icon" eigentlich das richtige Icon angezeigt wird *grummel*
(Bei ner Test-Objective C App wurde das Icon wenigstens nach einmal Neubooten übernommen) |
|
Nach oben |
|
 |
BleedingMoon •->

Anmeldedatum: 17.10.2004 Beiträge: 18
|
Verfasst am: 07.11.2004 - 04:28 Titel: |
|
|
Snow hat Folgendes geschrieben: | Wenn du dann später eine Referenz brauchst, genügt es 'alias' vor diesen Wert zu setzen. |
Hi mal wieder
Genau DAMIT habe ich im Moment ein riesen Problem.
Wenn ich mit dem "gePOSIXten" Item später wieder arbeiten und eine Referenz haben will , a la
set choosenItem to (theItem as POSIX file)
...
if kind of alias choosenItem is "Folder" then
blahblah
Hängt sich das Script erstmal für ne halbe Ewigkeit auf und dann brichts mit einer Fehlermeldung ab.
Ist dieses komische Verhalten eventl. bekannt oder mach ich einfach was falsch? |
|
Nach oben |
|
 |
BleedingMoon •->

Anmeldedatum: 17.10.2004 Beiträge: 18
|
Verfasst am: 07.11.2004 - 13:04 Titel: |
|
|
Ok, also im Moment hab ich wenigstens die Fehlermeldung weg bekommen, aber es dauert immer noch ne halbe Ewigkeit bis das Sript weitermacht. Foldendes hab ich jetzt:
set choosenItem to (theItem as POSIX file)
...
tell application "Finder"
set choosenItem to choosenItem as alias
if kind of choosenItem is "Folder" then
-- aufhänger
blahblah
...
end tell |
|
Nach oben |
|
 |
|