Rozcestník: Jste tu poprvé? Pro začátečníky jsem napsal úvod do programování v Delphi. Můžete si přečíst informace ohledně změn v jednotlivých verzích Delphi a případně mezi jednotlivými edicemi Delphi. Pokud přecházíte ze starších verzí tak si všimněte mého pojednání řetezce a unicode.
Možná Vás bude zajímat spolupráce databáze a Delphi, nebo se budete rozhodovat mezi různými druhy Delphi projektů.
Uvažujete o vývoji pro mobilní zařízení? V tom případě navštivte sekci FireMonkey.

Pokud Vám nestačí náš přehled komponent, navštivte adresář nejpopulárnějších open source Delphi komponent

Platform status - podporované platformy v jednotlivých verzích

Free Delphi Starter Edition download

Potřebujete Delphi školení nebo konzultace na různá témata?


Případ očekávaného Access Violation

vložil Radek Červinka 27. června 2024 16:02

Je vedro tak to trošku okořeníme. Mějme následující kód a odhadněte bez krokování, kde a zda vůbec program spadne. Je to umělá ukázka reálné situace, kterou jsem ale trošku zamaskoval ať je to zábavnější.

Možnosti k přemýšlení: spadne to protože volám metodu na nil objektu, spadne to protože TButton v console, spadne to protože TButton má taky Click, spadne to protože se snažím vypsat Caption a to je řetezec, spadne to protože se snažím nastavit Caption a to teprve nemůže projít, spadne to protože mám lokální proměnnou v metodě u nil objektu, spadne to protože přiřazují do lokální proměnné, spadne to protože čtu lokální proměnnou nil objektu, spadne to náhodou a jen někdy.

Nebo to v klidu projde vše. Jako je to trošku vyšší level, ale zkuste.

program TestAV;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  WinApi.Windows, System.SysUtils, System.Classes, WinApi.Messages, Vcl.StdCtrls;
type
  TTestButton = class(TButton)
  public
    procedure Click;
  end;

  procedure TTestButton.Click;
  var
    x: Integer;
  begin
    writeln('button.Click'); // Line A
    writeln(Caption);        // Line B
    Caption := 'Button 23';  // Line C
    x := ImageIndex;         // Line D
    writeln(IntToStr(x));    // Line E
  end;

var
  t: TTestButton;
begin
  try
    t:=nil;
    t.Click;                 // Line F
    t.Free;                  // line G
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  readln;
end.

Více...

Tagy:

Praxe

Android 13 a práce se soubory

vložil Radek Červinka 24. ledna 2024 19:30

S příchodem Androidu 11 google zpřísnil přístup k souborům, které nejsou přímo vaše, ale jsou sdílené (třeba na SD kartě atd). Do verze Android 12 to šlo potlačit přes manifest a requestLegacyExternalStorage, ale s příchodem Androidu 13 se situace změnila.

Více...

Tagy:

FireMonkey | Praxe

Automatické generování jména package dle verze

vložil Radek Červinka 19. října 2023 21:01

Jelikož není žádným tajemstvím, že Delphi 12 snad brzo bude - viz. náznaky beta blogování (taky snad něco brzy napíši pod explicitním povolením od Embarcadera), tak bych rád zdůraznil jednu opomíjenou vlastnost novějších verzí Delphi - je na to IMHO ideální čas.

Jako každý programátor jsem měl problémy s balíčky komponent a novými verzemi, kdy aby nedošlo k problémům se soubory (dependency hell), má vždy balíček pro danou verzi jiný název. Klasicky obsahuje číslo verze, viz. samotné Delphi - např. FireDAC280.bpl, vcl280.bpl atd. Pro mne tak byl vždy největší opruz dodělávat balíčky pro novou verzi, a to v případě kdy to neudělal vývojář.

Naštěstí už několik verzí (podle všeho od D10.4 - viz třeba balíčky VirtualTreeView) je tu řešení: automatické generování suffixu a teď je ideální čas se tím zabývat. Za ten ušetřený čas v budoucnu do stojí.

LIB suffix

Více...

Tagy:

Návody | Praxe

Monitorování stavu resources v aplikaci

vložil Radek Červinka 11. srpna 2023 16:12

Často píšu programy které běží dlouho a tak mne zajímá, zda se tam neděje něco co nechci. V takovém případě si do logu zapisuji stav programu (tedy kromě jiného samozřejmě). Sice existují knihovny, ale pro mé potřeby většinou stačí jednoduchá funkce.

demo resourcestatus

Více...

Tagy:

Praxe

UDP Broadcast nejen pro Android za pomocí System.Net.Socket

vložil Radek Červinka 11. května 2023 20:48

Vždycky jsem UDP psal pomocí Synapse, ale chtěl jsem zkusit něco nového a chtěl jsem to pro Android za pomoci inhouse řešení - i když je Synapse pro Android je dostupná.

Server byl existující synapse UDP server (tady je sample public:howto:udpserver) pro windows, který na zaslaný řetezec <ident> vrátil název počítače, takže jsem během chvilky dostal seznam dostupných stanic i s IP adresou pro připojení z Androidího klienta.

Více...

Tagy: , ,

Praxe

TListView ve Firemonkey

vložil Radek Červinka 7. prosince 2022 19:17

TListView ve FMX má celkem zajímavé možnosti, které nejsou na první pohled dostupné a některé si ukážeme.

TListView

Více...

Tagy:

Praxe

Nastavení verze aplikace pro všechny platformy najednou

vložil Radek Červinka 5. července 2022 13:15

Delphi od určité verze (Delphi XE2?) podporuje nastavení verze pro každý TARGET samostatně. Chápu, že to může mít někdy přínosné, ale osobně s tím bojuji, koncept All platforms mi moc nefunguje a spíše mne to otravuje. Takže jsem začal hledat nějaké řešení a výsledkem je používání DDevExtension, které napsal autor FixPacku a které nedávno uvolnil jako open source a psal jsem o tom i zde na serveru.

Version info

Více...

Tagy:

Praxe | Rozšíření Delphi

Dvakrát tip pro debugger

vložil Radek Červinka 27. června 2022 23:58

Dlouho jsem nepsal o nějaké fintě pro ladění, tak jsem si vzpomněl na takové dvě drobnosti:

Zobrazení dat z memory stream

Samozřejmě se nejedná jen o memory stream jelikož se jedná o populární bázovou třídu tak to použijeme častěji. Pokud jste v místě, kde máte parametr TStream, není nic jednoduššího než přes volání .ClassName zjistit zda se jedná o potomka TMemoryStreamu, objekt přetypovat a použít následující trik (napadl mne, když jsem ladil volání SOAP a pořád jsem logoval stream do souboru abych ho zkontroloval).

Více...

Tagy:

Praxe

Použítí synapse v THTTPRIO při volání SOAP

vložil Radek Červinka 30. března 2022 08:48

Pokud potřebujete používat SOAP, tj. web services, má Delphi léta pro to podporu přes THTTPRIO. Od verze 10.3 RIO je jako komunikační vrstva použit THTTPClient, což je ve většině případů optimální řešení, protože používá preferované řešení operačního systému (např. na Windows SChannel).

Ale: mohou nastat případy, kdy dané řešení nevyhovuje, a pak je tu možnost relativně jednoduše nahradit komunikaci za vlastní (v mém případě to bylo nutnost rychlé změny self signed klientských certifikátů na různých OS). Zvolil jsem synapse. Takže jdeme na to, není to nic hrozného.

Více...

Tagy: ,

Praxe

FastMM4 AVX, FastMM5

vložil Radek Červinka 13. srpna 2020 16:21

Už je to nějakou dobu, co jsem psal o FastMM4 naposledy a mezitím se něco změnilo. Vývoj FastMM4 byl nahrazen za FastMM5 s možnou komerční licencí a objevil se fork FastMM4-AVX. Fork mají na svědomí autoři známého emailového klienta Bat!, což není špatná vizitka. Více...

Tagy:

Komponenty | Praxe

Implementujeme iterator pro Bookmarklist

vložil Radek Červinka 26. března 2019 22:14

Už od verze 2007 Delphi podporuje procházení přes for - in, bohužel některé třídy stále tuto podporu nemají.

Požadovaný stav:

var
  bmk: TBookmark;
begin
  for bmk in  DBGrid1.SelectedRows do
  begin
//xxx
  end;
end;

Více...

Tagy:

Delphi | Praxe | Rozšíření Delphi

Zajimavé předávání parametrů pro OLE

vložil Radek Červinka 22. ledna 2019 00:14

Sem tam mne Delphi překvapí. Nepřijde vám ta syntaxe u PrintOut trochu zajímavá? Delphi prý to podporují od verze 2. Myslím, že na pořadí ani nezáleží.

  if (OpenDialog1.Execute) then
  begin
    WinWord := CreateOleObject('Word.Application');
    if (not (VarIsEmpty(WinWord))) then
    begin
      try
        WinWord.Visible := false;
        Docs := WinWord.Documents;
        Doc := Docs.Open(OpenDialog1.FileName);
        vFrom := 1;
        vTo := 2;
        Doc.PrintOut(Background := false, Append := false, Range := wdPrintFromTo, OutputFileName := EmptyParam, From := vFrom, To := vTo);
                  // err
      finally
        WinWord.Quit;
      end;
    end;

Jen pro připomenutí - PrintOut má mnoho parametrů - word.document.printout

Tagy:

Praxe

FireDAC a connection pool

vložil Radek Červinka 16. prosince 2018 10:57

Méně známou vlastností FireDAC je, že obsahuje přímo podporu pro Connection Pool.

Co je Connection pool? Connection pool je třída obsahujicí kolekci otevřených připojeni. V případě vícevláknových aplikací (tj. např. všechny ty REST servery nebo cokoliv kde obsluhuje více požadavků zároveň, případně i normální aplikace, kde používáte více dynamických connection) většinou potřebují přístup do databáze.

FireDAC je threadsafe (tj. bezpečné použítí ve vláknu) jen v případě, že vlákno má vlastní Connection (to je normální požadavek napříč jazyky nebo platformami). Přičemž největší režie je právě vytvoření připojení do DB. Proto se používá mechanismus ConnectionPool, kdy už nepoužívané Connection objekty jsou po nějakou dobu k dispozici a další požadavek na novou connection bude uspokojen některou z těchto Connection.

Nebojte se, FireDAC to má elegantně vyřešeno.

Více...

Tagy:

Praxe

Problém Ranorex a Delphi DLL

vložil Radek Červinka 5. prosince 2018 21:58

Minulý týden jsem narazil na problém kdy testovací oddělení začalo hlásit problémy při běhu programu na kterém spolupracuji pod Ranorexem.

Odbočka: Ranorex nedávno získala IDERA, tj. vlastník Embarcadero. Tím rozšířila své portfolio pro vývoj aplikací o další zářez, kompletní seznam je na ideracorp.com a obsahuje kromě Embarcadero další akvizice z nedávné doby jako Sencha, Whole Tomato, Test Rail atd. přičemž některé produkty jsou nyní přibalovány k vyšším edicím Delphi. Mimochodem když se podíváte na ideracorp.com/news, uvidíte, že všechny akvizice jsou až po získání Delphi - celkem velké investice do rozšíření portfolia a celkem ve svižném tempu.

Ale zpět k našemu problému s Ranorexem.

Více...

Tagy:

Praxe

webbroker a http.sys

vložil Radek Červinka 18. září 2018 22:34

Od Windows XP SP2, resp. Windows Server 2003 operační systém windows obsahuje driver jádra pro obsluhu http požadavků s názvem http.sys. Ve skutečnosti se jedná o plný HTTP server a to přímo v jádře - což mimochodem znamená, že je na nižší úrovni než třeba IIS nebo Apache a bez veškerých závislostí.

Webbroker nabízí několik možností jak překládat výsledné aplikace (např. jako standalone web server), ale http.sys je prostě jiná liga. To si uvědomují i tvůrci komponent, jako např. TMS Sparkle - což je základem jejich nového Delphi web frameworku (pas to JS compiler) WebCore, nebo Intraweb.

A samozřejmě Open Source implementace - Synopse http.sys.

Více...

Tagy: ,

Praxe

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců