Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaNa FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaPro o tom vlastn pu? Asi proto, e abyste zskali prci jako programtor, tak u nikoho nezajm, e umte nahodit vesu pes assembler. Je poteba umt dnen trendy. N asopis sice nen o dnench trendech, ale je hlavn o pascalu. Chci ukzat, e pascal nen pozadu ani v tchto odvtvch.
Hlavnm rozdl mezi TurboPascalem a FreePascalem je ten, e FreePascal je programovac jazyk se vm vudy, podobn jako c, a TurboPascal je jen uebn uebn pomcka, kter vs uvede do svta programovn (i kdy nkdo v nm zstane navdy). Pokudmte v rukou FreePascal, tak se mete klidn pustit i do vytven GUI aplikac.
V tomto dle bych se chtl vysvtlit zkladn prci s GUI.
Gtk v pascalu a v c nen objektov! Proto to vypad tak sloit, ale
Hlavn okno se dl na boxy (containery). Boxy jsou vertikln a horizontln. Kad box me obsahovat objekty (i dal boxy) a tak mete postavit celou aplikaci.
Struktura pkladu, kter uvedu na konci je asi takov:
GtkWindow +-GtkVBox +-GtkLabel +-GtkButtonNejlep je ve si navrhnout pedem na papr nebo njho graf. editoru.
Dal vc co je nutn znt jsou signly (events,callbacks,signals). Kad objekt vyvol pi aktivaci njkou udlost. Tuto udlost meme odchytit a zpracovat.
program HelloWorld; uses glib,gtk,gdk; var window, {Hlavni okno} glabel, {Retezec} gbutton,{Tlacitko} vbox: {Vertikalni Box} PGtkWidget; {Tyto procedury preskocte a vratte se az budete u definovani signalu} procedure quit(widget:PGtkWidget;event:PGdkEvent;data: pgpointer);cdecl; {To vsecho widget posila: Co je zac, jakou udalosti byl vyvolan a data, ktera byla poslana} begin gtk_main_quit(); {Jedina funkce, ktera dokaze vyskocit z hlavniho loopu. Nepouzivejte halt!} end; procedure hello(widget:PGtkWidget;event:PGdkEvent;data: pgpointer);cdecl; begin writeln('hello'); end; Begin gtk_init(@argc, @argv); {Tohle je jasne z cecka} window:=gtk_window_new(GTK_WINDOW_TOPLEVEL);{Nove okno} gtk_widget_set_usize(PGtkWIDGET(window),125,90);{Neni to objektove, tak to vypada slozite} gtk_window_set_title(GTK_WINDOW(window), 'Test program'); vbox:=gtk_vbox_new(true,0); {homogenous,spacing} gtk_container_add(PGtkCONTAINER(window),vbox); {A o tom to cely je} glabel:=gtk_label_new(''); gtk_label_set_text(PGtkLABEL(glabel), 'Press button to exit'); {Ted bude pridani glabel do vbox, ktery uz je ve window - strukturovanost} gtk_box_pack_start(PGtkBOX(vbox), glabel,true,true,0);{S temito paremetry si musite pohrat} GTK_WIDGET_SET_FLAGS(glabel,gtk_CAN_DEFAULT);{Priznam se, tady nevim o co tu jde} gbutton:=gtk_button_new_with_label('Hello, world!'); gtk_widget_set_usize(PGtkWIDGET(gbutton),1, 1); gtk_box_pack_start(PgtkBOX(vbox), gbutton, true, true,0); GTK_WIDGET_SET_FLAGS(gbutton, gtk_CAN_DEFAULT); gtk_widget_grab_default(gbutton); gtk_widget_show_all(window); {Ukaze vse co widget obsahuje} {SIGNALY} {Ted jde do tuheho} gtk_signal_connect(Gtk_OBJECT(window), 'delete_event', GTK_SIGNAL_FUNC(@quit), NIL); {delete_event je ten krizek na okne. Nazvy vsech udalosti jdou nalezt k tutorialu gtk} {Posledni dva parametry jsou kterou funkci provest a pak pointer na data, ktera se maji funkci poslat} gtk_signal_connect(PGtkOBJECT(gbutton), 'clicked', GTK_SIGNAL_FUNC(@hello), NIL); gtk_main(); {A od ted se vsechno rozjede} End.
#include#include int quit(GtkWidget *widget,gpointer data) { gtk_main_quit(); return 0; } int hello(GtkWidget *widget,gpointer data) { printf("Hello, world!"); return 0; } int main(int argc,char *argv[]) { GtkWidget *window,*gbutton,*glabel,*vbox; gtk_init(&argc,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(GTK_WIDGET(window),125,90); gtk_window_set_title(GTK_WINDOW(window),"Test program"); vbox=gtk_vbox_new(TRUE,0); gtk_container_add(GTK_CONTAINER(window),vbox); glabel=gtk_label_new("Press button to exit"); gtk_box_pack_start(GTK_BOX(vbox),glabel,TRUE,TRUE,0); gbutton=gtk_button_new_with_label("Hello, world!"); gtk_widget_set_usize(gbutton,1,1); gtk_box_pack_start(GTK_BOX(vbox), gbutton,TRUE,TRUE,0); gtk_widget_show_all(window); gtk_signal_connect(GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(quit),NULL); gtk_signal_connect(GTK_OBJECT(gbutton),"clicked",GTK_SIGNAL_FUNC(hello),NULL); gtk_main(); return 0; }
#!/usr/bin/perl use Gtk; init Gtk; my $window = new Gtk::Window("toplevel"); my $vbox = new Gtk::VBox(0,0); my $glabel = new Gtk::Label("Press butoon to exit"); my $gbutton = new Gtk::Button("Hello, world!"); $window->set_usize(125,90); $window->signal_connect("delete_event", &quit); $gbutton->signal_connect("clicked", &hello); $vbox->pack_start($glabel,1,1,0); $vbox->pack_start($gbutton,1,1,0); $window->set_title("Hello, world!"); $window->add($vbox); $window->show_all(); main Gtk; sub quit { Gtk->exit(0); } sub hello { print "Hello, world!"; }
#!/usr/bin/python from gtk import * def quit(*args): mainquit() def hello(*args): print 'Hello, world' window = GtkWindow(WINDOW_TOPLEVEL) window.set_title("Test program") window.set_usize(125,90); vbox = GtkVBox(0,0); glabel = GtkLabel("Press button to exit"); gbutton = GtkButton("Hello, World!") vbox.pack_start(glabel,1,1,0); vbox.pack_start(gbutton,1,1,0); window.add(vbox); window.connect("delete_event", quit) gbutton.connect("clicked", hello) window.show_all() mainloop()
Tmito kdy jsem chtl ct, e pokud se naute pracovat s Gtk v pascalu nebo v c, tak u pro vs nebude dn problm napsat program v jazyce jinm. Nzvy funkc a objekt jsou vcemn podobn.
A jet nco. Radm vm: NEPOUVEJTE WINAPI!