Posts by pefo0001

    Unter Bilder > Exportieren kommt als Auswahl nur "Liste exportieren". Aber egal, wenn du den Parameter {photoxml} machst, dann passt das schon.


    Und wenn du ohnehin dabei bist, kannst du bitte auf in der Einzelansicht eines Bildes die externen Programme als Kontextmenü aufnehmen?
    Und, weil ich unersättlich bin, eventuell 16 statt 9 mögliche externe Programme?


    Schöne Grüße,
    Peter

    Oder du machst aus der "photos.txt" eine "photos.xml" mit so einem Inhalt:


    <imabas>

    <icf>Pfad zur icf-Datei></icf>

    <bilder type="photolist">

    <bild>Pfad zum ersten Bild</bild>

    <bild>Pfad zum 2. Bild</bild>

    .

    .

    <bild>Pfad zum n-ten Bild</bild>

    </bilder>

    </imabas>


    Sinngemäß auch für photokeys oder photoids.

    Sobald ich Imabas öffne, wird automatisch auf die in der imabas.xml stehende Datenbank verbunden. Frage ist, wenn ich über Datenbank verbinden eine andere Datenbank öffne: schreibt Imabas dieselbe sofort in imabas.xml hinein? Wenn ja, dann kein Problem, weil ja das externe Programm erst später darauf zugreift und damit immer die richtige Datenbank findet. Wenn Imabas die imabas.xml erst beim Schliessen aktualisiert, dann ist's problematisch. In diesem Fall wäre die Frage, wie ich die Datenbank, die Imabas gerade verwendet, ausfindig machen kann. Schreibt Imabas irgendwo eine Temp-Datei, die ich auswerten könnte?

    Funktioniert blendend, danke!


    Noch eine letzte Frage: Imabas verbindet auf eine Datenbankdatei mit der Extension "icf". In der stehen alle Verbindungsdaten zur MySQL- Datenbank drin, auch das Passwort, allerdings verschlüsselt. Mein externes Programm findet den Pfad zu dieser Datei über den entsprechenden Eintrag in der "imabas.xml".


    Somit könnte ich einfach auf die MySQL Datenbank verbinden, wenn ich denn das Passwort entschlüsseln könnte.......

    Hab erfolgreich 2 Programme geschrieben, das eine, das den Pipe-Server realisiert, und das andere, das was sendet. Nun wollte ich von Imabas aus auf den Pipe-Server senden, ohne Erfolg.


    Habe in der Registry folgendes eingetragen (abgeleitet aus der Pascal-Funktion "GetFixFotoExecutable" (das Fake Programm "FixFoto.exe" liegt bei mir auf dem Pfad "d:\-programmierung-\IMABAS13\pipe\"):


    [HKEY_CURRENT_USER\Software\Joachim Koopman Software\FixFoto]

    @=""

    "X64Path"="d:\\-programmierung-\\IMABAS13\\pipe\\"

    "Path"="d:\\-programmierung-\\IMABAS13\\pipe\\"


    Dann hab ich versucht, FixFoto in Imabas zu aktivieren, einerseits unter:
    "Anwendungen -> Optionen -> Anwendung -> FixFoto im Menü anzeigen" und andererseits unter:
    "Anwendungen -> Optionen -> Externe Programme -> FixFoto"


    Im ersten Fall kann ich zwar das Häkchen setzen, es wird jedoch nicht gespeichert; im anderen Fall kommt die Fehlermeldung, wie ich sie schon gestern gemeldet habe.


    Benötigt Imabas mehr als den Regisrty Eintrag wie oben dargestellt, um FixFoto zu finden?

    Danke für die Anwtort!


    zu Pipes:

    Habe zwar mit Pipes noch nichts zu tun gehabt, aber das lässt sich erlernen. Ich schreibe meine Programme im Compiler Purebasic, da ist fast alles möglich. Gib mir doch bitte etwas Info zur Pipe, wie sie bei FixFoto angewandt wird, dann kann ich mich reinlesen.

    Trotz Pipe: kann realisiert werden, dass der Aufruf des externen Programms mit einem Parameter versehen werden kann (siehe das Bild in meinem Beitrag von vorgestern)? Dieser Parameter soll der Steuerung im externen Programm dienen.


    zu Makro:

    würde mir auch passen.
    Trotzdem bräuchte ich den zweiten Parameter, der dem externen Programm sage, was mit der Datei anzufangen ist, z.B.:

    Parameter "--download" würde bedeuten, dass alle Dateien in der Übergabedatei auf die Festplatte runterzuladen wären, oder
    "--hintergrund" würde bedeuten, dass das erste Bild in der Übergabedatei als Bildschirmhintergrund zu installieren ist, oder

    "--send-to" würde bedeuten, dass zuerst verkleinerte Bilder erzeugt werden, die dann einem E-Mail angelegt werden

    "--play" wäre das Abspielen eines Videos

    u,s,w,


    Und: wie kann ich den Aufruf externe Programme auch im Einzelbild-Fenster einbinden?


    Schöne Grüße,
    Peter

    Ergänzung zu meinen Fragen:

    Habe festgestellt, dass das externe Programm gar nicht aufgerufen wird, wenn mehr als ein Bild angewählt ist.


    Mir würde reichen, wenn dem externen Programm die ID's der gewählten Bilder, z.B. kommasepariert übergeben werden. Dann könnte ich die Datenbank befragen und die Bildpfade daraus ermitteln.


    Toll wäre es auch, wenn es möglich wäre, Parameter vorzudefinieren, wie im Bild dargestellt:


    Aufruf des externen Programms extern.exe mit einem Parameter -aktion1 und einem weiteren Minus, an das dann die ID's der Bilder angefügt wird.


    z.B.:

    extern.exe -aktion1 -F9E65C814CBB465D9E2FD3D2F5C1687E,CBF6F5BE7F574D63829B6E14E4990583,A5349BD1DED9441997E0368783BD8D32

    oder:

    extern.exe -aktion2 -F9E65C814CBB465D9E2FD3D2F5C1687E

    Danke für die Antwort, verstehe ich.

    Frage 1:

    Mit einem externen Programm könnte ich gut leben, wenn diesem beim Aufruf Daten übergeben werden, wie es beim Aufruf von Fixfoto funktioniert. Bei einem gewählten Bild wird der gesamte Bildpfad an das aufgerufenen Programm übergeben, das ist o.k. und damit kann ich was anfangen.
    Nur wenn ich mehrere Bilder markiere und das externe Programm aufrufe, dann wird offensichtlich nichts übergeben. Kann das geändert werden, oder gibt's einen anderen Weg, die gewählten Bilderpfade weiterzuleiten?


    Frage 2:

    Den Menüpunkt "externe Programme" finde ich nur im Browser, nicht jedoch im Detailfenster (wenn man im Browser auf ein Bild doppelklickt). Kann dort ein entsprechender Menüpunkt eingefügt werden?


    Schöne Grüße, Peter

    Bilder will ich gar nicht über eine Aktion importieren. Das mach ich weiterhin über die normale Funktion in Imabas.


    Ich will nur erreichen, dass per Aktion ein Volume und der dazugehörige EINE Film angelegt wird.


    Letzteres scheitert halt.


    Warum brauche ich das überhaupt? Nun, ich benutze Imabas nicht nur für Bilder, sondern auch für Videos. Per externem Programm, das ich selbst geschrieben habe, wird ein ganzes Verzeichnis mit Filmen konvertiert und danach auf eine Volumestruktur schreibt, die im Filemanager so aussieht:


    ......ImabasVerzeichnis\Videos\ =Hauptpfad in Imabas
    relativ dazu:
    VolumeTitel1\ =darin verbergen sich die Titelbilder im png-Format
    VolumeTitel1\100\ =Ablage der Originalvideos
    VolumeTitel1\30\ =Ablage der verkleinerten Videos für Web-Anwendungen
    die Dateinamen ohne Extension sind je Video identisch, z.B.:


    20161216_205110_DSCN9969.MOV = Originalvideo
    20161216_205110_DSCN9969.MP4 = verkleinertes Video
    20161216_205110_DSCN9969.PNG = Titelbild


    das Ganze kann beliebig gestaffelt sein.


    Per Aktion kann ich das Video über ein externes Programm abspielen, indem ich diesem externen Programm den kompletten Pfad des Titelbildes übergebe.


    Das funktioniert perfekt.


    Die oben genannte Volumestruktur muss ich Imabas bekanntgeben. Und das geht halt nicht vollständig, weil sich dieser eine Film pro Volume nicht anlegen lassen will.


    Doch noch eine Idee für das Anlegen des Films?


    Peter

    Ich hab's geschafft, per Aktion ein neues Volume anzulegen. Leider geschieht das aber nicht vollständig:


    newvol:=TIVolume.create;
    newvol.Caption:='Titel des neuen Volumes';
    newvol.Path:='Titel des neuen Volumes'+'\';
    newvol.NoFilms:=true;
    newvol.NoVolumes:=false;
    newvol.Volume:=parentvol;
    newvol.PathType:=2;
    newvol.Append;


    Bis hierher funktionierts!
    Das Anlegen eines Films funktioniert
    leider gar nicht:


    newfilm:=TIFilm.create;
    newfilm.Caption:='Titel des neuen Volumes';
    newfilm.HideInTree:=true;
    newfilm.NoImport:=false;
    newfilm.Volume:=newvol;
    newfilm.Append;


    Es wird leider kein neuer Film angelegt, sondern es kommt die Fehlermeldung "null pointer exception"




    Hat jemand eine Idee?
    Peter

    Bin nun selbst draufgekommen:


    function PerformAction(ObjectKey: String): Boolean;
    var
    qu:TIQuery;
    sql:string;
    attribs: String;
    hilfsexe: String;
    response:integer;
    vol:TIVolume;
    begin
    sql:='SELECT * FROM volumes WHERE ukey = '+''''+ObjectKey+'''';
    qu:=TIQuery.Create;
    qu.SQL:=sql;
    qu.open;


    vol:=TIVolume.Create;
    vol.initialise(qu);
    qu.Free;
    hilfsexe:='fo-imabas.exe';
    attribs:='-m responsetest -f ' +'"'+vol.AbsolutePath+'"';
    vol.Free;
    response:=System_Execute(hilfsexe,attribs);


    Result := True;
    end;

    Liebe Gemeinschaft,
    wie kann ich den Rückgabewert eines durch System_Execute gestarteten externen Programms einlesen?


    response:=System_Execute(hilfsexe,attribs);
    response ist immer 42, wenn das Programm erfolgreich gestartet wurde


    Gibt es auch eine Möglichkeit, einen String zurückzugeben (eventuell per Anfangsadresse im Speicher) und in Imabas wieder auszulesen?


    Schöne Festtage!
    Peter

    Liebe Gemeinschaft,
    ich suche eine Möglichkeit, im Rahmen einer Aktion, den absoluten Pfad zur Datenbank auszulesen.


    Warum brauche ich das?
    Ich möchte einem externen Programm den kompletten absoluten Pfad zu einem Volume übergeben, und zwar mittels einer Volume-bezogenen Aktion, die mir den ObjectKey dieses Volumes übergibt. Rekursiv kann ich mit TIQuery bis zum "PathType=3" gelangen, wo das "BaseVolume" leer ist. Ich habe damit den gesamten relativen Pfad ab Position Datenbank.
    Nur für den absoluten Pfad zur Datenbank finde ich keine Funktion.


    Kann einer von euch helfen?


    Schöne Grüße,
    Peter

    Danke für die Info. Genauso, wie Du beschrieben hast, habe ich es versuchen wollen, nur, dass unter "FunKtionen" alles mögliche angeboten wird, nur nicht "Desktopbild erstellen". In meiner Version von Imabas scheint das nicht realisiert zu sein, oder es muss irgendwo aktiviert werden.
    Deshalb wollte ich auf die Windows API gehen.


    In der Zwischenzeit hab ich eine Lösung über eine exe gefunden, die ich selbst geschrieben habe und der ich das betreffende Bild übergebe als Pfad.


    function PerformAction(Image: TIImage): Boolean;
    var
    fName: String;
    begin
    fName:=GetMyPicturesPath+Image.OriginalName;
    with Image.Bitmap do try
    ResizeLongSide(1200);
    if SaveAsJPG(fName,80,True) then
    begin
    if System_Execute('wallpaper.exe',fName)<>0 then
    begin
    Message('Hintergrundbild erfolgreich angelegt');
    end
    else
    begin
    Message('Fehler 1, Abbruch der Aktion');
    end
    end
    else
    begin
    Message('Fehler 2, Abbruch der Aktion');
    end;
    finally
    Free;
    end;
    Result := True;
    end;