MyMemoryDB (ein elektronischer Zettelkasten)

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Hallo,

bei mir sieht es so aus:

Darstellung_unter_Linux.png

zuerst kommt der ganz normale Pfad
UND DANN macht nochmal die Linux-Version sein eigenes Ding und hängt nochmal 5 Zeilen in einem etwas anderen Format dran.

Der Code:

Code: Alles auswählen

procedure TF_Text.FormDropFiles(Sender: TObject;
  const FileNames: array of String);
var
  intI: integer = 0;
  sss : string;
begin
  sss := '';
  for intI := 0 to high(filenames) do
  NMemoText.lines.add(filenames[intI]);
end;                 
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Hallo Michael,
Ich glaube, so geht's:

Code: Alles auswählen

 
procedure TF_Text.FormDropFiles(Sender: TObject;
  const FileNames: array of String);
var
  intI: integer = 0;
  sss : string;
  A_MemoText: string; //Eine variable für Memo1.Text
  Select: Integer; //Position des Selektionsbegins
begin
  {$IFDEF WINDOWS}
  sss := '';
  for intI := 0 to high(filenames) do
    sss := sss + (filenames[intI]) + ''#13#10'';
 
  A_MemoText := NMemoText.Text;
 
  Select:=NMemoText.SelStart; //Selektionsbeginn zwischenspeichern
 
  if NMemoText.SelLength>0 then
  begin
    Delete(A_MemoText, Select+1, NMemoText.SelLength); //Selektiertes löschen
  end;
 
  Insert( sss , A_MemoText, Select); //neuen Text einfügen    -->> oder Insert(InsertText, MemoText, Select+1); //neuen Text einfügen
  NMemoText.Text:=A_MemoText; //Text zurück zu Memo1
 
  NMemoText.SelStart:=Select+length( sss ); //Selektionsbeginn hinter neuem Text wiederherstellen
  NMemoText.SelLength:=0; //Selektion auf 0 beschränken
  {$ENDIF}
end;             

Ich werde das Programm auf Heise.de aber erst morgen updaten. Irgendwie seltsam, dass Linux diese obigen Code-Zeilen nicht braucht :?:

Viele Grüße
Alfons
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

Hallo Alfons,

Nimm statt #13#10 besser die Konstante LineEnding. Die passt je nach verwendetem System immer.
Linux nur #10, Windows #13#10, Mac nur #13

Viele Grüße
Michael

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Guten Morgen Michael,
vielen, vielen Dank für Deine Tips und für Dein Testen von "MyMemoryDB"!
Bezüglich dieses Einfügen von File-Pfaden ist noch ein bisschen was zu tun; aber ich denke das wird :)
Ich sage Bescheid, wenn das Programm dies so macht, wie ich es gerne haben möchte. Heute schaffe ich es wahrscheinlich nicht mehr.

Ein schönes Wochenende!
Alfons
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

Hallo Alfons,

gerne.
kein Stress. Wir sind hier schliesslich auf der Arbeit und nicht auf der Flucht :-)

Ebenfalls ein schönes Wochenende
Viele Grüße
Michael

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Hallo,

ich denke, das Programm "MyMemoryDB" funktioniert nun recht gut in beiden Welten, Linux und Windows.
Folgender Programmcode:

Code: Alles auswählen

procedure TF_Text.FormDropFiles(Sender: TObject;
  const FileNames: array of String);
var
  intI , A_Sel_Start : integer;         // A_Sel_Start: Integer; //Position des Selektionsbegins
  Pfadtext_Windows , A_MemoText : string;
begin
  intI := 0;
 
  {$IFDEF WINDOWS}
  A_Sel_Start := NMemoText.SelStart; //Selektionsbeginn zwischenspeichern
 
  Pfadtext_Windows := LineEnding       + '->'+ LineEnding;
  for intI := 0 to high(filenames) do  Pfadtext_Windows := Pfadtext_Windows + (filenames[intI]) + LineEnding ;
  Pfadtext_Windows := Pfadtext_Windows + '<-' + LineEnding;
 
  A_MemoText  := NMemoText.Text;
 
  Insert( Pfadtext_Windows , A_MemoText, A_Sel_Start ); //neuen Text einfügen
  NMemoText.Text:=A_MemoText; //Text zurück zu Memo
 
  NMemoText.SelStart:=A_Sel_Start + length( Pfadtext_Windows ); //Selektionsbeginn hinter neuem Text wiederherstellen
  NMemoText.SelLength:=0; //Selektion auf 0 beschränken
  {$ENDIF}
end;                   
 

Es ist schon ein wenig schade, dass in diesem Fall das kompilierte Programm bei identischem Lazarus-Quellcode verschiedene Verhalten aufweist, je nachdem ob man das Programm mit Linux oder mit Windows aufruft.
Optimal wäre es, wenn Lazarus bei der Aktion "DropFiles" die Linuxausgabe ebenfalls "abfangen" und nicht gleich in das Memo schreiben würde, so dass man mit diesem "abgefangenen" Text ähnlich flexibel programmieren könnte wie in der Windows-Welt.

Allseits noch einen schönen Tag und nochmals Vielen Dank an Michael ("fliegermichel")
Alfons
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

Danke für die schnelle Lösung.

Leider kann ich sie nicht testen. Ich habe die Version von Heise heruntergeladen. Da ist eine MyMemoryDB.exe drin, die sich beschwert, daß die sqlite3.dll zwar da sei aber nicht geladen werden kann (Evtl. 32 <> 64 Bit?). Wenn ich die Version von Deiner Seite herunterlade, dann ist da die Betaversion 225 drin die ich schon hatte.

Viele Grüße
Michael

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Hallo Michael,

... das ist jetzt seltsam.
Eigentlich müsste schon die 64-bit sqlite3.dll mitgeliefert sein.

In Readme-Update.txt steht:
[i]Noch ein extrem weiterer Hinweis, wenn Sie auf die neue Version updaten:
Die neue Windows-Version benötigt für eine korrekte Datenbank-Funktion die richtige DLL für SQLite (sqlite3.dll). Es stellt sich heraus, dass es hier neue Versionen gibt und diese neue Version für die neue MyMemoryDB-Version nötig ist. Linux Programm haben - soweit ich es sehe - diese neue SQLite-Version schon als "Bordmittel" automatisch dabei, Windows nicht. Selbstverständlich liefere ich die neue Version jetzt mit aus, sollten Sie die alte SQLite-Version besitzen, dann tauschen Sie diese bitte aus! Sie erkennen die neue Version am einfachsten daran, dass die Dateigröße nun ca. 1,9 MB beträgt, während die alte Version nur 580,7kB groß war.

[/i]

Die Dateigröße ist > 1 MB, so dass eigentlich die 64-Bit Version dabei liegt. Und mit meinem Windows auf VirtualBox funktioniert die Version "MyMemoryDB_Beta302.exe" problemlos ???
Auf "meiner" Seite habe ich noch nicht die neueste Version "MyMemoryDB_Beta302.exe" drauf.

Viele Grüße
Alfons
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

sorry mein Fehler, ich hab natürlich die Readme-Update.txt ignoriert.
funktioniert jezt einwandfrei.

Danke!

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

Hallo Alfons,

bei der Arbeit mit MyMemodyDB ist mir aufgefallen, daß ein lokaler Dateilink nicht mit F4 aufgerufen werden kann, wenn der Dateiname Leerzeichen enthält.
Übrigens ist es eine gute Idee, seine im Internet zum Download angebotenen Programme digital zu signieren. Der Anwender bekommt sonst jedesmal eine Warnung angezeigt, daß er potentiell Schadsoftware startet.

Ich habe das für meine Programme in Lazarus automatisiert.
Ich habe ein Verzeichnis C:\Sign
In diesem befinden sich signtool.exe, mein Zertifikat mclcodesign.pfx und dosign.bat
dosign.bat hat folgenden Inhalt

Code: Alles auswählen

 
@echo off
if "%1" == "" goto error
c:\sign\signtool.exe sign /f c:\sign\mclcodesign.pfx /p meinpasswort /t http://timestamp.comodoca.com %1
goto end
:error
echo "Fehlender Parameter"
:end
 


In Lazarus habe ich bei den Projekteinstellungen unter "Compiler-Kommandos" bei "nachher ausführen"

Code: Alles auswählen

 
c:\windows\system32\cmd.exe /C c:\sign\dosign.bat "$TargetFile()"
 


Damit ist jede exe, dll usw. sofort nach dem compilieren signiert.


Viele Grüße
Michael

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Guten Morgen, Michael!

Das Problem mit den Leerzeichen ist, dass ein Leerzeichen als Textseparator identifiziert wird, so dass ein Link, der ein Leerzeichen enthält, an der Stelle, wo sich das Leerzeichen befindet, abgebrochen wird.

Der zugehörige Programmcode:

Code: Alles auswählen

Function TF_Text.URL_extrahieren ( A_Memo : TMemo ; A_Selstart  : integer ) : string; // A_Flag 1:ins Keyword-Blatt 2:in die Suchworte-Liste
var
   i,  selbeginn     , z , k : integer;
   txt, s : WideString;
begin
     result := '';
     txt := UTF8Decode(A_Memo.Text);
     selbeginn := A_Selstart;
     i := A_Memo.SelStart;
     s := '';
     repeat
       result := s + result;
       s := Copy(txt, i, 1);
       Dec(i);
     until (s <= ' ') or (i < 0);
     i := A_Selstart + 1;
     s := '';
     repeat
       result := result + s;
       s := Copy(txt, i, 1);
       Inc(i);
     until (s <= ' ') or (i < 0);
     Globl.Wort_putzen( result );
 
     z := Length ( Globl_Prg_Pfad_nur_Pfad + '/MyMemoryDB_Daten') ;
     k := Pos('MyMemoryDB_Daten', (result))//  "Pfad bleibt auch nach "Umzug" aufrufbar
     if (k > 0)  then   // Wenn dieser Dateiname im Link vorkommt, dann ist k > 0
     begin
      result :=  ( Globl_Prg_Pfad_nur_Pfad + ( copy(result , k , z) ) );
     end;
end

Ich habe keine Idee, wie man dieses Problem lösen könnte.

Mit einer automatisierten digitalen Signatur von Files muss ich mich erst noch ein wenig beschäftigen; aber Danke für diesen Hinweis!

Viele Grüße und ein schönes Wochenende!
Alfons

(Freut mich übrigens, dass Du "MyMemoryDB" nicht schon längst wieder in die Tonne getreten hast :) )
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

Hmm, davon ausgehend, dass ein Dateiname vermutlich in einer Zeile des Memos steht, würde ich die aktuelle Zeile in eine Stringvariable übertragen und dann prüfen ob eine Datei mit dem Namen existiert.
etwa so:

Code: Alles auswählen

 
function TForm1.IsFilename(Sender: TObject) : boolean;
var Line : integer;
    s : string;
const boolstr : array[boolean] of string = ('Nein', 'Ja');
begin
 Line := Memo1.CaretPos.y;
 s := Memo1.Lines[Line];
 Result := FileExists(s);
 MessageDlg(Format('Existiert die Datei in Zeile %d (%s)? : %s', [Line+1, s, boolstr[Result]]), mtInformation, [mbOk], 0);
end;
 


Das funktioniert allerdings nicht, wenn der Dateiname so lang ist, daß das Memo den Dateinamen umbricht.

BeniBela
Beiträge: 308
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von BeniBela »

fliegermichl hat geschrieben:Übrigens ist es eine gute Idee, seine im Internet zum Download angebotenen Programme digital zu signieren. Der Anwender bekommt sonst jedesmal eine Warnung angezeigt, daß er potentiell Schadsoftware startet.


Aber so Zertifikate sind doch recht teuer?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von fliegermichl »

Bei Comodo ca 100€ für zwei Jahre. Das bedeutet, daß man 2 Jahre lang Programme signieren kann. Das signierte Programm bleibt aber dauerhaft signiert.

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: MyMemoryDB (ein elektronischer Zettelkasten)

Beitrag von Aliobaba »

Liebe Anwenderinnen und Anwender von "MyMemoryDB",

es freut mich, Euch mitteilen zu können, dass eine neue Version von"MyMemoryDB" auf Heise.de verfügbar ist.
Download hier:
https://www.heise.de/download/product/mymemorydb-89626

Die Verschlüsselungs-Tools sind zum Teil neu geschrieben und haben eine veränderte Benutzeroberfläche.
Sie können nun Texte, die Ihnen wichtig sind "anpinnen": Button: "PinMe" .

... und es finden sich sehr viele "kleinere" Veränderungen, die den Programmcode effektiver machen.

Viel Spaß und ein schönes Wochenende!

Alfons Geigenberger
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antworten