Nvod k pouit qgtk2.pas




1. zkladn struktura programu

procedure qstart(wcaption : string; onkey, ondestroy : Tprocedure);
procedure qdestroy;
procedure qGo;

- qStart inicializuje gtk a vytvo hlavn okno qMainWindow s nadpisem wcaption.
  Procedura onkey me zpracovvat stisknut klves, stisknut znak
  nalezneme v promnn qkey, kd klvesy v qkeykode. Kdy klves
  esc, enter a ipky jsou v konstantch qkEnter, qkEsc, qkUp, qkLeft... 
  Procedura ondestroy probh pi pokusu o ukonen programu,
  nastavme-li v n promnou qCanDestroy na false program se neukon.
  Pkaz qdestroy ukonuje program, qGo spout hlavn progamovou smyku gtk.



2. menu a uspodn komponent
  
procedure qmnu(caption : string);
procedure qsubmnu(caption : string; proc : tprocedure);

- procedura qmnu vytvo jednu poloku v lit menu, klikneme-li na ni,
  uk se poloky uren volnmi procedury qSubmnu, kter nsleduj
  po voln pslunho qmnu. Pi voln procedury qsubmnu se odkaz na proceduru
  proc uvd znakem @. (Podobn se uvdj v procedue qButton odkazy 
  na procedury volan pi stisknut tlatka.) Zan-li popis poloky 
  v submenu pomlkou, bude tato poloka oddlena od ostatnch vodorovnou arou. 
  (viz tutorial - qdialog.pas)

procedure qNextRow;
procedure qNextRowResize;
procedure qNextRowLeft;
procedure qseparator; 
procedure qFrame; 
procedure qEndFrame;

- slou k uspodn komponent v okn.
  Volnm procedur jednotlivch komponent (qlabel, qbutton, ...)
  se pslun komponenty umisuj vedle sebe v jedn dce zleva 
  do prava v tom poad, jak jsou procedury volny.
  Po zavoln procedury qNextRow se nsledujc komponenty  
  vytej na novm dku. Procedura qFrame umouje seskupovat komponenty
  do sloupc. Voln qFrame zahajuje nov sloupec, chceme-li ve sloupci adit
  komponenty pod sebe, musme je oddlovat opt pomoc qNextRow. Procedurou
  qEndFrame sloupce ukonme a dal komponenty se ad normln na dek
  pod sloupce. (viz tutorial, qpack.pas a qpack2.pas).



3. label a editan vstup

function qlabel( caption :string) : qWidget; 
function qlabelWrap(caption :string; width : integer) : qWidget;
procedure qlabelset(labl : qWidget ; caption: string);

- qlabel vytv label, qlabelWrap vcedkov label dan ky.
  qlabelset nastavuje na dan label nov text.
  
function qlabelXpm( xpmFile :string) : qWidget;
function qlabelXpm_d(Data : ppgchar) : qWidget;

- vytv label s obrzkem natenm bu z xpm souboru, nebo z dat
  v programov jednotce vytvoen programen xpm2pas.
  
function qedit(text: string) : qWidget;
procedure qeditset(edit : qWidget ; text: string);
function qeditget(edit : qWidget) : string;

- editan vstupn dek.



4. tlatka

function qbutton( caption : string; proc : tprocedure  ) : qWidget;
function qbuttonXpm(xpmFile, hint : string; proc : tprocedure  ) : qWidget;
function qbuttonXpm_d(Data: ppgchar; hint: string; proc: tprocedure): qWidget;

- tlatko s nadpisem caption, nebo s xpm obrzkem (obrzek bu z xpm souboru,
  nebo z dat z programov jednotky vytvoen programen xpm2pas ).

function qbuttonToggle( caption : string; proc : tprocedure  ) : qWidget;
function qToggleGetA(button : qWidget) : boolean; 
procedure qToggleSetA(button : qWidget); 
procedure qToggleSetN(button : qWidget);

- pepnac tlatko, qToggleGetA je true kdy je tlatko aktivn (stisknut)
  qToggleSetA nastav tlatko aktivn, qToggleSetN nastav ho neaktivn.
  


5. text

function qtext(width, height : integer; onchange : Tprocedure) : qWidget;
function qtextlength(txt : qWidget) : longint; 
procedure qtextsetp(txt : qWidget; i : longint); 
function qtextgetp(txt : qWidget) : longint; 
procedure qtextinsert( txt : qWidget; text : string);
procedure qtextdel(txt : qWidget; startp, endp : longint); 
procedure qtextaddline( txt : qWidget; text : string);   
function qtextstring(txt : qWidget; startp, endp : longint) : string;
procedure qtextsel(txt : qWidget; startp, endp : longint); 
procedure qtextcopy(txt : qWidget); 
procedure qtextpaste(txt : qWidget); 
procedure qtextcut(txt : qWidget); 
function qtextSelEnd(txt : qWidget): longint; 
function qtextSelStart(txt : qWidget): longint;
procedure qtextApplyFont(txt : qWidget); 
procedure qtextSetEdit(txt : qWidget); 
procedure qtextSetNoEdit(txt : qWidget); 
function qtextload(txt : qWidget; filename : string) : boolean; 
function qtextsave(txt : qWidget; filename : string) : boolean;

- textov editan pole.  Procedura qtextsetp nastavuje kurzor na pozici i znak
  od zatku, qtextinsert vlo etzec na pozici kurzoru, 
  qtextaddline pid dek na konec.
  startp a endp v procedurch qtextdel, qtextstring a qtextsel 
  je potek a konec seku textu (endp=-1 znamnen a do konce souboru).
  Procedura qtextsel ozna sek textu, qtextcopy kopruje 
  do schrnky,  qtextSelStart a qtextSelEnd vrac polohu potku a konce
  oznaenho textu. Font v komponent text je dn promnou qfontname,
  qtextApplyFont nastav v celm textu font po zmn hodnoty qfontname (qfontname
  se ur v dialogu qFontSelect nebo funkc qFont, tak je mon ped
  volnm qStart nebo qFont nastavit jmno fontu do promnn qfontname0).
  Procedura qtextSetNoEdit nastav text jen pro ten. 
  Pklad pout viz qtext.pas.
   


6. list

function qlist(width, height:integer; sorted: boolean;
                   onchange, on2click :tprocedure ) : qWidget;
procedure qlistAdd(list: qWidget; text : string);   
procedure qlistInsert(list: qWidget; text : string);  
procedure qlistDelRow(list: qWidget);  
procedure qlistClear(list: qWidget); 
function qlistItem(list: qWidget) : string; 
procedure qlistselect(list: qWidget; row : integer); 
function qlistselrow(list : qWidget) : integer; 
function qlistrowcount(list : qWidget) : integer;

- seznam umoujc vybrat jeden dek, pi zmn vybranho dku probhne
  procedura onchange, p dvojkliku na dku (nebo stisknut enter) probhne
  procedura on2click. Podrobnosti viz qlist.pas.



7. dialogy

function qFileselect(caption: string; filename:string ): string; 
function qFontSelect(caption: string ) : string; {set qgdkfont, return fontname}
function qClrSelect(caption: string) : longint;  {RRRGGGBBB,  999000000 is red}
function qdialog(message, but1capt, but2capt, but3capt : string): integer;
function qinput(message, inputstr : string): string;

- rzn dialogy. qdialog vrac slo stisknutho tlatka, qinput vrac 
  uivatelem upraven etzec inputstr. Podrobnosti viz qdialog.pas.




8. dal procedury

procedure qshow(widget : qWidget); 
procedure qhide(widget : qWidget);
procedure qsetfocus(wid: qwidget);
function qsecwindow(caption: string) : qWidget;
procedure qshowsec(secwind : qwidget); 
procedure qshowsecmodal(secwind : qwidget); 
procedure qhidesec(secwind : qwidget); 
procedure qtimerstart(interval : longint;  proc : tprocedure  );
procedure qMainIter;
function qprogress(width :integer): qWidget;
procedure qprogressSet(progress:qwidget; percent:integer); {percent 1..100}
procedure qshowW32console; 
procedure qhideW32console;

- qshow a qhide uke nebo skryje komponentu, qsefocus nastav focus na
  komponentu (pouze pro qedit, qtext a qlist),
  qsecwindow vytvo sekundrn okno, k jeho zobrazen a ukryt slou
  qshowsec a qhidesec. 
  qtimerstart spout po intervalu v ms proceduru.
  qMainIter umouje, aby probhala programov smyka gtk i bhem delch
  vpot a aby uivatelsk prosted zstalo aktivn. Viz qmainit.pas.
  qshowW32console a qhideW32console m vznam jen v M$ win32, uke nebo
  skryje dosov okno, ze kterho je program sputn a do kterho vypisuje
  chybov zprvy.



9. grafika

procedure qdrawstart(width, height : integer; 
           onstart, procclick, procmove : tprocedure ); 
function qsetClr(rgb : longint ) : boolean;      {RRRGGGBBB,  999000000 is red}
procedure qpoint( x, y : integer );  
procedure qrect( x, y, width, height : integer );  
procedure qfillrect( x, y, width, height  : integer);
procedure qfillellipse( x, y, width, height  : integer); 
procedure qellipse( x, y, width, height  : integer); 
procedure qline( x1, y1, x2, y2: integer ); 
procedure qfont(size:integer); 
procedure qdrawtext(x,y : integer; s : string);  
procedure qdrawpic(x, y  : integer; pic: qpic );  
procedure qgetpic(x,y, width, height  : integer; var pic : qpic ); 
procedure qpicFromXpm(xpmfile : string; var pic : qpic); 
procedure qpicFromXpm_d(data : ppgchar; var pic : qpic); 
procedure qupdateRect(x, y, w, h : integer);

-  qdrawstart vytvo komponentu qdrawArea, kter me
   v celm programu  bt jen jedna.
   Procedura onstart probhne na potku po inicializaci grafiky, 
   procedury procclick a procmove probhaj pi kliknut myi na qdrawArea,
   nebo pi pohybu myi a napln promnn qx, qy a qmousebut.
   Procedury kresl barvou nastavenou v qsetClr. Pro barvy mono 
   pout konstanty qWhite, qBlack, qRed, qGreen, qBlue, 
   qYellow, qGray, qPurple, qAqua a qBrown.
   qdrawtext pov font dan promnou qfontname, viz poznmku o fontu 
   u komponemty text. Aby nebyl nastaven nevhodn font je teba ped
   volnm qStart zadat jmno fontu do promnn qfontname0. (nap.:
   qfontname0:='Sans Bold 12';)
   Xpm obrzky meme mt nateny v promnch typu qpic, 
   Pi zobrazen procedurou qdrawpic se bere v vahu i prhledn barva.
   Nastavme-li promnou qAutoupdate na false musme pak vdy
   zmny v grafice zviditelnit procedurou qupdateRect (vhodn provdme-li
   vce zmn v obrzku najednou).


10. posuvn objekty v poped grafiky

qfgobj = object
  constructor newFromXpm(fname : string; x, y, width, height : integer);
  constructor newFromXpm_d(data:ppgchar; x, y, width, height : integer);
  procedure  setPic(Pic : qpic);  
  procedure move(x,y : integer);   
  procedure show;   
  procedure hide;  
  procedure tobk;   
  procedure tofg;  
  destructor free;  
end;

- objekty podporuj prhlednou barvu, maj oeteno, aby pi posunu
  nedchzelo k blikn.
  Objekt deklarujeme  var picobj : qfgobj;
  vytvome           picobj.newFromXpm('pic.xpm', 10, 20, 64, 64);
  ukeme             picobj.show;
  posuneme            picobj.move(15, 20);
  zmnme             picobj.setPic(pic);
   (pic vytvome teba procedurou qpicFromXpm)
  dme za ostatn objekty   picobj.tobk;
  ...
  Viz camel.pas
  
  
  
11. pomocn program xpm2pas

Pevd xpm obrzky na programovou jednotku. Obrzky pak budou pmo
zakompilovny do programu a nebude poteba je mt v samostatnch souborech.
Xpm obrzky mus mt mn ne 8000 barev a ku men ne 127 bod,
pro mn ne 90 barev me bt ka a 255 bod. Do jedn programov
jednotky me bt dno vce obrzk, jednotka dostane nzev  xpmpic.pas.
Na jednotliv obrzky se pak budeme odkazovat v procedurch poadujcch
xpm data nzvem "nzevXpmSouboru_d"



12. poznmky k utf-8 a iso-8859-2 kdovn znak

Gtk a stejn i qgtk2.pas podporuj kdovn unicode utf-8.
Nepouv-li systm pln kdovn utf-8, je pro sprvn zobrazovn 
neascii znak teba teba nastavit promnnou pas_encoding. 
Je-li v Linuxu nastaveno locale pouvajc kdovn iso-8859-2 
a chceme-li toto kdovn pouvat ve zdrojovm kdu programu 
a ve vstupech a vstupech pak je poteba zadat pas_encoding:=e_8859_2. 
(V M$ windows je treba podobne nastavit pas_encoding:=e_1250)
(Podrobnosti viz qlocale.pas)


13. License: GNU GENERAL PUBLIC LICENSE 

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or  
(at your option) any later version.  

This program is distributed in the hope that it will be useful,   
but WITHOUT ANY WARRANTY; without even the implied warranty of  
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.


  (c) 2002-2005 Jirka Bubenicek  -  hebrak@yahoo.com   

