![]() |
Re: NonVCL OpenDialog
Zitat:
Delphi-Quellcode:
Dürfte wohl nicht 0 sein. :gruebel:
GtkWindow *parent
In dem FileChooser Example (C:\lazarus\fpc\2.2.3\source\packages\gtk2\example s\filechooser\simple.pas) gibt es diese procedure:
Delphi-Quellcode:
Du solltest also
* 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-Quellcode:
einfügen
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]); |
Re: NonVCL OpenDialog
Ich verstehe ehrlich gesagt nicht, warum du nicht die VCL/LCL verwendest. Die tut die ganze Arbeit mit dem OpenDialog nämlich schon für dich - das ist ja eben der Sinn von solchen Abstrahierungsebenen - und die paar Kilobyte, die deine Anwendung größer werden, sind ja wirklich kein Grund.
Zum Beispiel ist ja nicht wirklich gesagt, dass ich unter Linux GTK installiert habe. Verwendest du die LCL, kannst du mit einem Klick zum Beispiel auf QT ausweichen - oder willst du dafür auch noch einen OpenDialog implementieren? |
Re: NonVCL OpenDialog
Mir düngt ich habe vergessen zu schreiben wieso das ganze.
Also Ich habe eigentlich eine OpenGL anwendung gebastelt. Und diese will ich Platformunabhängig haben. Das geht mittels SDL. Aber alles SDL das ich habe funktioniert eben nur ohne VCL, bzw LCL. Es kann gut sein das es ne Möglichkeit gibt wie man das machen kann das SDL mit VCL, bzw LCL läuft, wie das geht, weis ich aber leider nicht. @Igel457 Ich nutze auch viel Lieber die VCL, LCL, und wenn ich wüste wie man SDL mit VCL, LCL zum laufen bringt, ich würde es machen. @Garfield Das Prob ist das ich mit SDL kein Pointer auf ein Main Fenster habe, und deswegen kann ich da auch nichts übergeben, und habe deswegen eine 0 übergeben. Der Dialog wird ja geöffnet und gibt mir sogar die Filename zurück, die ich laden soll. nur Leider schliest sich der Dialog eben nicht, und deswegen habe ich dann die Probleme. |
Re: NonVCL OpenDialog [Gelöst]
AHH endlich, ich habe des Rätsels Lösung
der Code
Delphi-Quellcode:
Am ende eingefügt löst das Problem und alles läuft 1a.
While gtk_events_pending() = 1 Do
gtk_main_iteration_do(false); Igels einwand bleibt zwar bestehen, aber mir gehts darum das es überhaupt unter Linux geht. |
Re: NonVCL OpenDialog
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz