Non LCL OpenFiledialog
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Non LCL OpenFiledialog
Hallo alle,
Ich bin neu hier und hoffe das dies das Richtige Unterforum ist.
Ich habe bisher sehr viel unter Windows und Delphi 5 Pro gemacht. Nun Will ich aber auf Linux ( Ubuntu ) wechseln.
Das Problem ist natürlich das ich meine ganzen Alten Projekte Portieren will.
Und da gehts auch schon los.
Ich nutze sehr viel OpenGL, das zu Portieren geht mittels SDL. SDL wiederrum verlangt das ich ohne VCL ( LCL ) Arbeite unter Windows habe ich daher einen NonVCL OpenFiledialog / SaveFiledialog. Doch wenn ich nach Lazarus Linux und einem solchen Dialog suche, finde ich immer nur Beiträge, welche sich auf die IDE beziehen.
Kann mir jemand hier weiterhelfen und einen entsprechenden Code nennen ?
Ich bin neu hier und hoffe das dies das Richtige Unterforum ist.
Ich habe bisher sehr viel unter Windows und Delphi 5 Pro gemacht. Nun Will ich aber auf Linux ( Ubuntu ) wechseln.
Das Problem ist natürlich das ich meine ganzen Alten Projekte Portieren will.
Und da gehts auch schon los.
Ich nutze sehr viel OpenGL, das zu Portieren geht mittels SDL. SDL wiederrum verlangt das ich ohne VCL ( LCL ) Arbeite unter Windows habe ich daher einen NonVCL OpenFiledialog / SaveFiledialog. Doch wenn ich nach Lazarus Linux und einem solchen Dialog suche, finde ich immer nur Beiträge, welche sich auf die IDE beziehen.
Kann mir jemand hier weiterhelfen und einen entsprechenden Code nennen ?
--
Just try it
Just try it
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: Non LCL OpenFiledialog
Herzlich Willkommen im Forum.
Schau mal hier nach:
http://www.freepascal.org/packages/gtk/ ... tents.html" onclick="window.open(this.href);return false;
Punkt 9.13 sollte in etwa das sein, was du brauchst.
Ansonsten ggf. mal schauen, wie Lazarus/FPC das macht, irgendwann wird da ja auch auf gtk zugegriffen.
//Nachtrag: Schau mal in deinem FPC-Verzeichnis unter examples\gtk2\filechooser, da hast du genau dafür zwei kleine Beispiele
Schau mal hier nach:
http://www.freepascal.org/packages/gtk/ ... tents.html" onclick="window.open(this.href);return false;
Punkt 9.13 sollte in etwa das sein, was du brauchst.
Ansonsten ggf. mal schauen, wie Lazarus/FPC das macht, irgendwann wird da ja auch auf gtk zugegriffen.
//Nachtrag: Schau mal in deinem FPC-Verzeichnis unter examples\gtk2\filechooser, da hast du genau dafür zwei kleine Beispiele
Johannes
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Non LCL OpenFiledialog
Also,
examples\gtk2\filechooser
Gibts bei mir leider nicht, obwohl ich die neuese Lazarus version habe ( 0.9.24 beta )
Aber das andere Sample scheint brauchbar zu sein.
Zumindest kann ich es Compilieren und es schreibt mir die "geladenen" Dateien in die Konsole.
Werde nun versuchen das so um zu bauen wie ich das Brauche.
Denn eigentlich will ich das ja in der Art
Bin mal gespannt ob ich das hinkriege ..
examples\gtk2\filechooser
Gibts bei mir leider nicht, obwohl ich die neuese Lazarus version habe ( 0.9.24 beta )
Aber das andere Sample scheint brauchbar zu sein.
Zumindest kann ich es Compilieren und es schreibt mir die "geladenen" Dateien in die Konsole.
Werde nun versuchen das so um zu bauen wie ich das Brauche.
Denn eigentlich will ich das ja in der Art
Code: Alles auswählen
Var Filename:String;
Begin
..
Filename := OpenDialog('*.*');
if Filename <> '' then begin
..
End;
..
End;
--
Just try it
Just try it
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Non LCL OpenFiledialog
So ich habe nun was zusammengeschustert.
Das Problem ist natürlich das ich keine Ahnung habe was ich da zusammenkopiert habe, deswegen geht die Filtermaske auch noch nicht.
Vielmehr befürchte ich aber eine Grundlegend Falsche Anwendung oder noch schlimmer Speicherlöcher.
Laut Debugger scheint der Dialog dafür aber zu funktionieren
Die Frage ist ob das gtk_init(0,0) nicht auch irgendwo wieder Rückgängig gemacht werden sollte ??
Hier mal mein bisheriges Machwerk, Verbesserungsvorschläge sind erwünscht *g*
[EDIT]
Zu Früh gefreut, Zwar kriegt der Dialog es hin das er mir den Dateinamen gibt. Nur leider beendet sich der Dialog nicht, und Rauscht dann irgendwann sammt der Hauptanwendung ab
Das Problem ist natürlich das ich keine Ahnung habe was ich da zusammenkopiert habe, deswegen geht die Filtermaske auch noch nicht.
Vielmehr befürchte ich aber eine Grundlegend Falsche Anwendung oder noch schlimmer Speicherlöcher.
Laut Debugger scheint der Dialog dafür aber zu funktionieren

Die Frage ist ob das gtk_init(0,0) nicht auch irgendwo wieder Rückgängig gemacht werden sollte ??
Hier mal mein bisheriges Machwerk, Verbesserungsvorschläge sind erwünscht *g*
[EDIT]
Zu Früh gefreut, Zwar kriegt der Dialog es hin das er mir den Dateinamen gibt. Nur leider beendet sich der Dialog nicht, und Rauscht dann irgendwann sammt der Hauptanwendung ab

Code: Alles auswählen
unit uOpendialog;
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
interface
uses
{$IFDEF FPC}
Glib2, Gdk2, Gtk2,
{$ELSE}
{$ENDIF}
Classes, SysUtils;
Function OpenFile(Filter:String):String;
implementation
Function OpenFile(Filter:String):String;
var
dialog : PGtkWidget;
filename : Pgchar;
begin
Result := '';
gtk_init (0,0);
dialog := gtk_file_chooser_dialog_new ('Open File',
0,
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_OPEN, [GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL]);
if gtk_dialog_run (GTK_DIALOG (dialog)) = GTK_RESPONSE_ACCEPT then
begin
filename := gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
result := Filename;
g_free (filename);
end;
gtk_widget_destroy (dialog);
end;
end.
--
Just try it
Just try it
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
Re: Non LCL OpenFiledialog
dann haltcorpsman hat geschrieben:Also,
examples\gtk2\filechooser
Gibts bei mir leider nicht,...
/usr/share/fpcsrc/packages/gtk2/examples/filechooser
oder woauchimmer dein FPC liegt.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Non LCL OpenFiledialog
hab das andere Sample nun auch gefunden, aber im Prinzip steht da ja das selbe drin wie in dem Tutorial.
Zumindest, kann ich aus dem Sample keine weitere erkenntnis mehr ziehen, wieso der oben gepostete source einen Timeout erzeugt beim Beenden...
Zumindest, kann ich aus dem Sample keine weitere erkenntnis mehr ziehen, wieso der oben gepostete source einen Timeout erzeugt beim Beenden...
--
Just try it
Just try it
Re: Non LCL OpenFiledialog
Die letzte stabile Version von Lazarus ist 0.9.26.corpsman hat geschrieben:
Gibts bei mir leider nicht, obwohl ich die neuese Lazarus version habe ( 0.9.24 beta )
knight
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Non LCL OpenFiledialog
Hmm ich habe Lazarus halt via synaptic installiert.
wenn du mir verrätst wie ich die neueste version drauf machen kann, mach ich das gerne.
Ein einfaches runterladen der Datei "lazarus-ide_0.9.26-0_i386.deb" und doppelklick sagt mir : Error Dependency is not satisfiable : fp-compiler
und das obwohl ich die Datei fpc_2.2.2-3_all.deb installiert hab.
ich befürchte nur das mir das mit meinem Opendialog nicht arg viel weiterhelfen wird...
[Edit]
Also durch runterladen von allen *.deb Dateien die es da auf der Lazarus HP gibt. Habe ich es nun geschafft die ver 0.9.26 beta zu installieren und WOW die sieht super aus. Nur leider gibts noch einige Fehler :
1. Beim Starten von Lazarus bekomme ich nun immer die Fehlermeldung : "Unable to open package 'JPEGForLazarus'. This package was marked for installation."
2. Wenn ich die Unit Gtk2.pas einbinde , welche ich ja eingebunden habe. Dann bekomme ich einen Linker Fehler und das Programm lässt sich nicht mehr compilieren.
wenn du mir verrätst wie ich die neueste version drauf machen kann, mach ich das gerne.
Ein einfaches runterladen der Datei "lazarus-ide_0.9.26-0_i386.deb" und doppelklick sagt mir : Error Dependency is not satisfiable : fp-compiler
und das obwohl ich die Datei fpc_2.2.2-3_all.deb installiert hab.
ich befürchte nur das mir das mit meinem Opendialog nicht arg viel weiterhelfen wird...
[Edit]
Also durch runterladen von allen *.deb Dateien die es da auf der Lazarus HP gibt. Habe ich es nun geschafft die ver 0.9.26 beta zu installieren und WOW die sieht super aus. Nur leider gibts noch einige Fehler :
1. Beim Starten von Lazarus bekomme ich nun immer die Fehlermeldung : "Unable to open package 'JPEGForLazarus'. This package was marked for installation."
2. Wenn ich die Unit Gtk2.pas einbinde , welche ich ja eingebunden habe. Dann bekomme ich einen Linker Fehler und das Programm lässt sich nicht mehr compilieren.
--
Just try it
Just try it
- Garfield
- Beiträge: 173
- Registriert: Do 5. Jun 2008, 22:07
- OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
- CPU-Target: 64Bit
- Wohnort: Aken
Re: Non LCL OpenFiledialog
Das zweite Argument istCorpsman hat geschrieben:[delphi]dialog := gtk_file_chooser_dialog_new ('Open File',
0,
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_OPEN, [GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL]);[/delphi]
[delphi]GtkWindow *parent[/delphi]
Dürfte wohl nicht 0 sein.
In dem FileChooser Example (C:\lazarus\fpc\2.2.3\source\packages\gtk2\examples\filechooser\simple.pas) gibt es diese procedure:
[delphi]* File dialog-callback. *)
procedure dialog_callback (widget : PGtkWidget;
data : gpointer); cdecl;
var
dialog : PGtkWidget;
window : PGtkWindow;
action : gint;
filename : Pgchar;
begin
{ Get a pointer to the main window }
window := g_object_get_data (G_OBJECT(widget), MAIN_WINDOW_KEY);
action := gint (data);
case action of
ACTION_OPEN:
begin
dialog := gtk_file_chooser_dialog_new ('Open File',
window,
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_OPEN, [GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL]);
end; { ACTION_OPEN}
ACTION_SAVE:
begin
dialog := gtk_file_chooser_dialog_new ('Save File',
window,
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_SAVE, [GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL]);
end; { ACTION_SAVE }
else begin
{ This should never happen }
g_print ('Something is wrong here!!!.'#13#10);
g_print ('No dialog created.'#13#10);
{writeln crashes on my system running linux --- check why }
exit;
end;
end; { case }
if gtk_dialog_run (GTK_DIALOG (dialog)) = GTK_RESPONSE_ACCEPT then
begin
filename := gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
g_print ('Filename %s selected.'#13#10, [filename]);
// writeln ('File ', filename, ' selected.');
// ToDO:
// writeln crashes... check why
g_free (filename);
end;
gtk_widget_destroy (dialog);
end;[/delphi]
Du solltest also
[delphi]var
window : PGtkWindow;
begin
{ Get a pointer to the main window }
window := g_object_get_data (G_OBJECT(widget), MAIN_WINDOW_KEY);
dialog := gtk_file_chooser_dialog_new ('Open File',
window,
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_OPEN, [GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL]);[/delphi]
einfügen
Gruß Garfield
- corpsman
- Lazarusforum e. V.
- Beiträge: 1617
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Non LCL OpenFiledialog
Also es ist nun gelöst.
Wenn ich am ende noch
Einfüge dann gehts 1a 
Wenn ich am ende noch
Code: Alles auswählen
While gtk_events_pending() = 1 Do
gtk_main_iteration_do(false);

--
Just try it
Just try it