Witam
Mam problem, musze napisac na przedwczoraj zadanie na uczelnie i zrobic to w pascalu w dowolnym toolkicie. Wybralem gtk ponad to co oferowal lazarus i juz jestem na polmetku, ale mam problem.
Gdy chce utworzyc dialog otwierania pliku zwraca mi niestety wyjatek EDivByZero : Division by zero
Przykladowy kod, z ktorego chcialem skorzystac i przepisalem go z c++ na pascala i wystepuje ten problem, a w c++'wej wersji nie:

program tomek;

uses gtk2, gdk2, glib2;

var etykieta, okno, przycisk, vbox : pGtkWidget;

procedure pokaz_dialog( widget : pGtkWidget;  okno : pgpointer); cdecl;
var
	dialog : pGtkWidget;
	str : pgchar;
begin
   
    dialog := gtk_file_chooser_dialog_new( 'Otwórz...', GTK_WINDOW( okno ), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, nil );
   
    if gtk_dialog_run( GTK_DIALOG( dialog ) ) = GTK_RESPONSE_ACCEPT 
    then begin
       
        str := gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( dialog ) );
        gtk_label_set_text( GTK_LABEL( etykieta ), str );
    end;
   
    gtk_widget_destroy( dialog );
end;

begin
   
    gtk_init( @ argc, @ argv );
   
    okno := gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 200, 100 );
    gtk_window_set_title( GTK_WINDOW( okno ), 'Kurs GTK+' );
   
    przycisk := gtk_button_new_with_label( 'Dialog' );
    etykieta := gtk_label_new( 'Tekst' );
   
    vbox := gtk_vbox_new( FALSE, 3 );
   
    gtk_container_add( GTK_CONTAINER( okno ), vbox );
    gtk_box_pack_start( GTK_BOX( vbox ), etykieta, FALSE, FALSE, 0 );
    gtk_box_pack_start( GTK_BOX( vbox ), przycisk, TRUE, TRUE, 0 );
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 15 );
   
    gtk_signal_connect( GTK_OBJECT( przycisk ), 'clicked', G_CALLBACK( @pokaz_dialog ), gpointer ( okno) );
    gtk_signal_connect( GTK_OBJECT( okno ), 'destroy', G_CALLBACK( @gtk_main_quit ), NULL );
   
    gtk_widget_show_all( okno );
   
    gtk_main();
end. 

i tu inny przykladowy, ktory tez nie dziala

{ Converted from C to Pascal by Javier Ros <[email protected]> }
 PROGRAM filesel;

 USES glib, gdk, gtk;

 { ----------------------------file_ok_sel------------------------ }
 PROCEDURE file_ok_sel( w : pGtkWidget ; fs : pGtkFileSelection ); cdecl;
 (* Get the selected filename and print it to the console *)
 BEGIN
writeln( gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)) );
 END; { -------------------------file_ok_sel------------------------}

 { ---------------------------destroy----------------------------- }
 PROCEDURE destroy( widget : pGtkWidget; data : gpointer ); cdecl;
 BEGIN
gtk_main_quit();
 END; { ------------------------destroy------------------------------}

 { ---------------------------Global Variables-------------------- }
 VAR
filew : pGtkWidget ;
 { ---------------------------Main Program------------------------ }
 BEGIN
gtk_init(@argc, @argv);

(* Create a new file selection widget *)
filew := gtk_file_selection_new('File selection');

gtk_signal_connect(GTK_OBJECT(filew), 'destroy',
      GTK_SIGNAL_FUNC(@destroy), @filew);
(* Connect the ok_button to file_ok_sel function *)
gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION (filew)^.ok_button), 'clicked',
      GTK_SIGNAL_FUNC(@file_ok_sel), filew );

(* Connect the cancel_button to destroy the widget *)
gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filew)^.cancel_button),
      'clicked', GTK_SIGNAL_FUNC(@gtk_widget_destroy), GTK_OBJECT(filew));

(* Lets set the filename, as if this were a save dialog, and we are giving a default filename *)
gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew), 'filesel.pas');

gtk_widget_show(filew);
gtk_main();
 END. { ----------------Main Program--------------------- } 

to nie sa moje kody, chcialem ich urzyc do napisania swojego programu, a dokladniej jego czesci. zalezy mi tylko na pobraniu sciezki do pliku

przepraszam za brak polskich znakow

czy moze mi ktos powiedziec skad ten blad i jak go naprawic (tzn. ten wyjatek dzielenia przez 0)

Poprawione tagi z kodem na Pascalowe. - olesio