Dev

Lazarus 0.9.29 fejlesztői verzió Ubuntu Linuxon

A Lazarus 0.9.28-as stabil kiadása már egy kicsit öregnek mondható (2009. októberi) és azóta számos újdonság került a fejlesztői 0.9.29-es verzióba. Ha Ubuntu Linuxon szeretnénk használni a Lazarus legfrissebb fejlesztői változatát, akkor csak a szintén nem túl friss, 2010.06.21-i változatból vannak deb csomagok. Ha ezeket letöltjük, majd telepítjük, akkor a fordító nem fog működni. Valami baja van az erőforrások fordításával.

Ahelyett, hogy kibogoztam volna, hogy mi lehet a hiba oka, inkább valami más megoldást találtam: letöltöm a Lazarus forráskódját, majd fordítsok belőle magunknak futtatható fejlesztő környezetet.

Megjelent a Delphi Prism 2011

Az Embarcadero Technologies bejelentette, hogy megjelent a .Net platformra szánt Delphi legújabb verziója a Delphi Prism 2011. Az új verzió használatához Visual Studio 2010 szükséges és olyan .Net alatt még semmilyen más nyelven nem elérhető újdonságokkal szolgál mint az szempont-orientált és a párhuzamos programozási lehetőségek.

Főbb újdonságok:

  • MonoDevelop IDE
  • Silverlight 4
  • Visual Studio 2010 Shell
  • Extensions methods
  • Párhuzamos programozás
  • Funkcionális programozás
  • C# kód másolása és beillesztése a Delphi/Oxygene kódba
  • Code Obfuscation

További információk a Delphi Prism honlapján

Lazarus telepítés Mac OS X-re

A következő néhány egyszerű lépéssel telepíthető a Lazarus Mac OS X-re. A telepítéshez Mac OS X 10.6.2 szükséges.

  1. A Mac OS X CD-ről telepítsük a teljes XCODE-ot, vagy töltsük le az Apple oldaláról.

  2. Telepítsük a FreePascalt innen

  3. Töltsük le a Lazarus forráskódját, amit fordítás után már használhatunk is. Ehhez a következőket kell tenni:

    1. Nyissunk egy terminált

    2. Menjünk a Developers könyvtárba:
      cd /Developers

    3. Töltsük le a forrsákódot:
      svn co http://svn.freepascal.org/svn/lazarus/trunk lazarus

    4. Ha végeztünk, menjünk a letöltött források könyvtárába:
      cd /Developers/lazarus

    5. Fordítsuk le a Lazarust:
      make clean all

    6. És már futtathatjuk is:
      ./startlazarus

Ennyi.

A bejelentkezett felhasználó rendszergazda?

A Windows két alapvető felhasználói fiók típust különböztet meg: "Rendszergazda" és "Korlátozott". A rendszergazda jogosultságú felhasználók módosíthatják a számítógép beállításait: programokat telepíthetnek, rendszer szintű változtatásokat hajthatnak végre, stb.

Ha egy Delphi programban ellenőrizni kell, hogy a belépett felhasználó rendszergazdaként van bejelentkezve, vagy tagja a Rendszergazdák csoportnak, akkor azt a következő függvénnyel lehet egyszerűen megtenni:

function IsWindowsAdmin: Boolean;
const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority =  (Value: (0, 0, 0, 0, 0, 5)) ;
      SECURITY_BUILTIN_DOMAIN_RID = $00000020;
      DOMAIN_ALIAS_RID_ADMINS     = $00000220;

var hAccessToken: THandle;
    ptgGroups: PTokenGroups;
    dwInfoBufferSize: DWORD;
    psidAdministrators: PSID;
    g: Integer;
    bSuccess: BOOL;
begin
  Result:=False;
  bSuccess:=OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken);

  if (not bSuccess) and (GetLastError = ERROR_NO_TOKEN) then bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken);

  if bSuccess then begin
    GetMem(ptgGroups, 1024);
    bSuccess:= GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize);
    CloseHandle(hAccessToken);
    if bSuccess then begin
      AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
      for g:= 0 to ptgGroups.GroupCount - 1 do if EqualSid(psidAdministrators, ptgGroups.Groups[g].Sid) then begin
          Result:= True;
          Break;
      end;
      FreeSid(psidAdministrators);
    end;
    FreeMem(ptgGroups);
  end;
end;

Használat (pl.):

  if IsWindowsAdmin then showmessage('admin') else showmessage('nem admin');

Lazarus 0.9.30 - Erőforrás kezelés

A Lazarus következő verziójában megjelenő egyik legnagyobb változás az a módosított erőforrás kezelés lesz. A fő probléma a "régi" erőforrás kezeléssel az volt, hogy minden .lfm streamet egy .lrs fájlból be kellett illeszteni a unit initialization részébe. Mi a rossz ebben?

  • Először is az .lrs fájlokat is tárolni kell a projektben, ami elég tárhely igényes.
  • Második rossz dolog az initialization rész használata (az ebből a részből hívott utasítások a program indulásakor hajtódnak végre). Ha pl. 200 form van az alkalmazásban, akkor a program indulásakor kétszáz rutint kell végrehajtani. Ez nem túl jó dolog, ha a sebesség is számít.
  • Végül pár szó az erőforrásokhoz szükséges memóriáról és a memória lefoglalásának módjáról. Az .lrs erőforrások a program kódjában (amelyek induláskor végrehajtódnak) és TList osztálban egyaránt tárolva vannak. Tehát minden erőforrás kétszer van tárolva. Sőt ha újabb erőforrást akarunk hozzáadni a TList-hez, akkor az összes erőforrás memóriáját újra le kell foglalni: TList.Grow

Ezek a problémák tökéletesen megoldhatók az FPC 2.4.0 bevezetett natív erőforrás kezeléssel. Az FPC 2.4.0-s változatától kezdve lehetőség van a form erőforrások használatára az {$R *.lfm} direktíva használatával. Természetesen nincs szükség az .lrs fájlok tárolására és az initialization részre, valamint minden erőforrást is csak egyszer kell tárolni.

Mivel az erőforrás kezelésnek ezen módja sokkal hatékonyabb, a Lazarus fejlesztői úgy döntöttek, hogy ez legyen az alapértelmezett erőforrás kezelés. Természetesen az .lrs fájlok továbbra is használhatók maradnak, valamint a felhasználó eldöntheti, hogy az erőforrások tárolásának melyik módját választja.

Még egy az erőforrásokat érintő változás történt az XP manifest, a verzió információ és a projekt ikon kezelésben. Eddig több mint 5 fájlra volt szükség ezeknek az erőforrásoknak a tárolásához: egy ikont tartalmazó .lrs fájl, egy a manifest fájlra hivatkozó .rc fájl, verzió infó és projekt ikon fájlok. A projekt könyvtár leginkább egy állatkertre hasonlított. Ezentúl már csak egy .res és egy ikon fájlra lesz szükség. A .res fájt az új FreePascal állítja elő az fcl-res csomag segítségével. Ez azt jelenti, hogy nem kell többé a windres-t használni. A .res fájl minden platformon használható, míg korábban az .rc csak Windowson, az .lrs pedig a többi platformon volt használható.

Figyelem: a {$ifdef windows}{$R you_project.rc}{$endif} sort manuálisan kell kitörölni a az .lpr fájlból (ha van benne). Elképzelhető, hogy a jövőben készül erre automatikus megoldás.

Az új erőforrás kezelés előnyei tehát:

  • Kevesebb szemét a projekt könyvtárban, kisebb méret
  • Kisebb és gyorsabb programok (nincs szükség az initialization részre)
  • Kevesebb memória használat
  • Egységes erőforrás kezelés minden platformon

Hogyan változtassuk meg a Windows Start gomb feliratát?

Unod már a Windows Start menüjének feliratát? Ha van jobb ötleted, nincs más dolgod mint kézbe venni egy Delphit vagy Lazarust és már le is cserélheted. Valahogy így:

procedure ChangeStartButtonText(Text: String);
var sbHwnd: hWnd;
begin
  sbHwnd:=GetWindow(FindWindow('Shell_TrayWnd',nil),GW_CHILD or GW_HWNDFIRST);
  SetWindowText(sbHwnd,PChar(Text));
  SendMessage(sbHwnd,WM_SETFOCUS,0,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ChangeStartButtonText('Uccu');
end;

És az eredmény:

Windows XP-n működik.

Update: Akinek kedve van hozzá, le is töltheti a programot és a forráskódját is.

12 Ünnepi Rad Studio 2010 videó - 12: Dll-ek írása Rad Studioban

Az Embarcadero az ünnepek alkalmából 12 videót tesz közzé a Rad Studio 2010-ről.

A tizenkettedik videó egy Delphi és Dephi Prism által használható unmanaged dll létrehozását mutatja be Delphiben.

A sorozat korábbi részei:

  1. Unit Testing
  2. SyncEdit
  3. Editor tippek és trükkök
  4. Auditok
  5. UML Vizualizáció
  6. Live Templatek
  7. Hello Calculator
  8. Fordítás a háttérben
  9. Klasszikus kinézet
  10. Debug Visualizer
  11. GUI Tippek és Trükkök
  12. Dll-ek írása Rad Studioban

12 Ünnepi Rad Studio 2010 videó - 11: GUI Tippek és Trükkök

Az Embarcadero az ünnepek alkalmából 12 videót tesz közzé a Rad Studio 2010-ről.

A tizenegyedik videó (kb. 20 perc) néhány új GUI komponens használatát mutatja be. Ezen kívül az új funkciók használatához is mutat néhány tippet.

Ez videó azért nem került fel a YouTube-ra, mert hosszabb mint 10 perc.

12 Ünnepi Rad Studio 2010 videó - 10: Debug Visualizer

Az Embarcadero az ünnepek alkalmából 12 videót tesz közzé a Rad Studio 2010-ről.

A tizedik videó a RAD Studio 2010 környezetben megjelent Debug Visualizer használatát mutatja be.

A Debug Visualizer megmutatja, hogy mi történik pl. egy TStringList belsejében.

FreePascal 2.4.0

Megjelent a FreePascal fordító 2.4.0-ás változata.

Újdonságok:

  • Delphi szerű erőforrások minden platformon
  • Dwarf debug információs fejlesztések
  • Néhány új cél rendszer:
    • 64-bit Mac OS X (x86_64/ppc64)
    • iPhone (Mac OS X/Arm)
    • Haiku (from the BeOS family)
    • Javított ARM EABI támogatás
  • Teljes program optimalizálás
  • Számos hibajavítás a fordítóban és fél évnyi library frissítés (a 2.2.4.-óta)

További információk és letöltés: itt.

A meglévő forráskódokat esetlegesen érintő változások listája: itt.