Delphi.cz

Český portál Delphi

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 ř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ů.

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?

čtení čárového kódu pro Android a iOS a další

Jim McKeeth publikoval zdrojové kódy (nejen) pro snímání čárového kódu pro Android a iOS (o iOS jsem už psal na jaře), ale i podporu BlueTooth v XE5 pro Android (viz minulý článek). Součástí jsou i další zdrojové kódy pro ovládání zařízení (bohužel seriová komunikace přes USB na Android ne, a to jsem se sám snažil co to šlo).

Více...

Datum: 2014-02-04 21:21:00 Tagy: iOS, Android

Praxe

Oprava ADB.EXE pro spolupráci s dalšími Android tablety

ADB.EXE je debugger pro Android z jeho SDK. Je také částečně používán (resp. asi jeho upravená verze) Delphi pro komunikaci Androidím zařízením. Každopádně pokud nefunguje on, nebude fungovat ani ladění z IDE. ADB má implementováno rozhraní, pomocí kterého komunikuje s driverem pro zařízení. Tento driver je buďto součástí instalace HW (často ho najde windows update) nebo se dá použít generický google driver (případně si v něm upravte konstanty výrobce - asi je to takový vstupní test inteligence). Něco o tom můžete nalézt na stránkách Petra Houfa z EMBT http://petrhouf.blogspot.cz/2013/10/pripravazarizeni.html a petrhouf.blogspot.cz/2013/10/pripravaide.html, případně delphi.org/2014/01/custom-android-adb-usb/.

Pokud se Vám podaří nainstalovat driver, můžete narazit na další problém - ADB nezná vašeho výrobce. A proto tento článek.

Více...

Datum: 2014-01-29 21:20:00 Tagy: Android

Návody Praxe

Synapse - Android a iOS hack

Update: nová verze synapse iOS a Android

Christian Hackbart z dvbviewer.com mi zaslal silně upravenou verzi Synapse (resp. je to takové dočasné řešení) pro iOS a Android. Postavené je to na mé úpravě Synapse pro Mac OSX a spol (ssposix), s tím, že upravil některé části jádra aby se NextGen kompilátor uspokojil. Každopádně je to dočasné řešení, které není úplně korektní, ale věřím, že to někomu pomůže, než bude oficiální podpora Synapse.

Takže: není to oficiálně podporované ani Lukášem ani mnou, poskytované je to tak jak to je, s tím, že platí standardní podmínky, tj. buďte připraveni že se může stát cokoliv, včetně toho že Vám to sežere psa.

Download: synapse ios a android (360K)

Ohlasy pište do komentářů.

Více...

Datum: 2013-12-08 23:05:00 Tagy: Android, iOS, synapse

Praxe

Potvrzení o přijetí mailu

Nedávno jsem programoval komunikační modul do našeho systému a jedna z jeho součástí byla funkce potvrzování doručení mailů a to na obou úrovních které znám.

Samozřejmě jsem použil jako vždy Synapsi a rád bych zde o tom napsal několik poznámek.

Oprava: v tom MailToDNS byla chybka - za tím rfc822 se má přidat emailová adresa. Opraveno. Sice to fungovalo i tak, ale přesto.

Více...

Datum: 2013-10-15 21:37:00 Tagy: synapse, praxe

Praxe

External exception C0000006

Pokud při běhu Vašeho programu uživatelé reportují tuto chybu, tak vězte, že s největší pravděpodobností se jedná o jeden z těchto dvou problémů:

  • program je spuštěn z namapovaného disku (ať už se jedná o síťový disk nebo třeba flešku)
  • s menší pravděpodobností je na počítač nainstalován špatný antivirus

Více...

Datum: 2013-08-02 00:29:00 Tagy: delphi, windows

Praxe

Čtení čárových kódu z iOS Delphi aplikace

Pokud potřebujete ve svém programu (zatím pro iOS, ale v budoucnu i pro Android) přečíst a zpracovat čárový kód, můžete použít zapouzdření pro open source ZBar. Delphi XE4 wrapper pro iOS je ZBar Delphi iOS. Použijte google translator (tedy pokud neumíte korejsky).

Delphi ZBar

Více...

Datum: 2013-06-01 10:04:00 Tagy: XE4

Praxe

Modální story

Příběhů z praxe není nikdy dost. Narazil jsem na problém, že v některých případech kdy zobrazuji modální dialog z modálního dialogu a ještě do toho připletu jiný styl okna (WS_POPUP), někdy nastane problém, že Windows ztrácí informaci o pořadí modálních oken.

Více...

Datum: 2013-04-26 23:55:00 Tagy: VCL

Praxe

Operátory u záznamů a TBytes

Myslím, že celkem nedoceněnou vlastností je přetěžovaní operátorů u datové struktury record. Z cvičných důvodů ukáži jak např. emulovat 8bit string za pomocí TBytes.

Více...

Datum: 2013-04-04 00:39:00 Tagy: kompilátor, RTL

Novinky v Delphi Praxe

FireDAC - z praxe 2

Druhý (a možná poslední) díl poznámek o FireDAC, tak jak na to přicházím při přechodu z ADO.

Více...

Datum: 2013-03-29 00:17:00 Tagy: FireDAC, AnyDac

Praxe

FireDAC - z praxe 1

Jsem v procesu konverze větší DB aplikace z ADO -> FireDAC. Takže pár drobností.

Více...

Datum: 2013-03-16 01:01:00 Tagy: FireDAC, AnyDac

Praxe

Export PDF/A ve Fast Report

Fast Report umí export do PDF, ale jak jsem nedávno zjistil, vytvořené PDF má problémy hlavně na mobilech se systémem Android. Na iOS je to mnohem lepší, ale i tak to není dokonalé.

Existuje podverze PDF s názvem PDF/A, což je minimální verze PDF, která slovy Wikipedie je oficiální archivační verze formátu PDF definovaná v standardech ISO 19005-1:2005 a ISO 19005-2:2011. Jedná se o zúžení definice formátu PDF tak, aby bylo možné soubory uložené v PDF/A otevřít beze ztráty informace i všemi budoucími verzemi softwarových nástrojů.

Více...

Datum: 2013-02-27 21:59:00 Tagy: FastReport, pdf

Praxe

Náhodné výkřiky 34

Vítejte u další dávky drbů, odkazů a zajímavostí jak je vidím já.

FastCube

Více...

Datum: 2013-02-13 22:59:00 Tagy: FireMonkey, FastReport, db, XE3, delphi, kompilátor, linux

Návody Novinky Praxe

TWebBrowser.Document a rozhraní

Na fóru je pěkné pojednání o použití TWebBrowser.Document a mám svolení ho zde publikovat.

Na počátku všeho je reference interface (což je něco jako instance objektu akorát pro interface), pro tento případ v Delphi známý jako TWebBrowser.Document, v podání Microsoftu document DOM objekt. Tento interface pak podporuje spoustu věcí, ale jenom podle toho jakou verzí Internet Exploreru (resp. Windows) uživatel má.

Každá verze interface pak přináší nějaké rozšíření stávající funkcionality. Z hlediska samotné implementace se pak jedná stále o jednu a tutéž činnost (protože MSHTML interfacy vycházejí ze stále stejného základního IDispatch a dědičnost jako taková mezi nimi neexistuje). Tou činností je dotazování, zda daná reference podporuje požadovaný interface (v tomto případě zda TWebBrowser.Document podporuje např. IHTMLDocument3 interface). Více...

Datum: 2012-11-30 00:01:00 Tagy: VCL

Praxe

Dynamické zavádění knihoven v MAC OSX

Kreténi. Tak jedině mohu nazvat autory OS X. Vysvětlím proč. Minule jsem popisoval jak staticky linkovat knihovny na OSX. V podstatě si musíte dát jen pozor, aby se při importu u symbolů přidalo podtržítko. Tj. pokud se exportovaná funkce jmenuje Foo, při importu musíte specifikovat název

_Foo

Ok, prostě taková úchylka, člověk se s tím smíří. Více...

Datum: 2012-11-07 00:17:00 Tagy: OSX, DLL, RTL

Praxe

Firemonkey a konverze grafických formátů

Převáděl jsem aplikaci z VCL na FireMonkey a po (upravené) konverzi přes Mida Convertor z instalace XE3 (jedná se o light verzi, která neupravuje pas soubor, ale jen DFM) jsem po první kompilaci narazil na problém, že aplikace nešla přeložit, protože nenašel kompilátor unit jpeg.

Řešení je samozřejmě nasnadě, stačí použít FMX verzi TBitmap, která podporuje x formátů. Více...

Datum: 2012-11-01 00:39:00 Tagy: grafika, FireMonkey

Praxe

Filtrování Virtual Tree View

Moc se mi líbí způsob vyhledávání ala Windows 7 nebo novější Delphi IDE, tj. začnete psát a zobrazují se vám jen relevantní záznamy. Přemýšlel jsem, jak je to těžké udělat pro můj milovaný švýcarský nůž mezi komponentami aka TVirtualTreeView. Jelikož právě v Delphi IDE je použit modifikovaný VirtualTreeView tak jsem doufal, že to až takový problém nebude. A nebyl.

Virtual TreeView

Více...

Datum: 2012-10-24 21:36:00 Tagy: Virtual TreeView, praxe

Praxe

Connection Pool

Implementace Connection Pool v Delphi.

Výhody:

  • různá vlákna mohou používat připojení (např. TIBDatabase), aniž by se musela starat o mechanismy autorizace a správy těchto připojení,
  • omezení počtu zbytečných vytváření a uvolňování připojení k databázi, která mají zpravidla značnou režii,
  • omezení maximálního počtu současně aktivních připojení jednoho uživatele a
  • nakonec to nejdůležitější: je to cool :-)))
  • Více...

    Datum: 2012-09-01 20:56:00 Tagy: db, praxe

    Praxe

Zpětná nekompatibilita pri volání OLE v XE2

Petr Fejfar upozornil v konferenci na změnu ohledně volání OLE v XE2 (změna je v Update4).

Cituji:

Narazil jsem na docela hnusný problém, že mi funkčni aplikace, vyvinutá v D2010 a migrovaná do XE2 přestala po přeloženi současnou XE2+Upd4 verzi pracovat. Konkrétně se jednalo o EOleException pri nastavování Borders.LineStyle:

  AWS.Range[ATopLeft,ABottomRight].Borders[AEdge].LineStyle := ALineStyle;

Update: readme - docwiki.embarcadero.com/RADStudio/en/Release_Notes_for_XE2_Update_4

Více...

Datum: 2012-08-08 22:41:00 Tagy: DelphiXE2

Praxe

Ještě jednou Delphi a Java, tentokrát v XE2 64bit

Před časem jsem psal o propojení projektů v Javě a Delphi prostřednictvím rozhraní JNI (unit JNI.pas). S přechodem na Windows 7 64bit a Java 1.7 64bit vyvstal jeden nepříjemný problém. Tím je generování výjimky Access violation v unitu JNI.pas v metodě TJNIEnv.ArgsToJValues, která má za úkol převést pole pascalských argumentů na pole argumentů pro Javu.

Více...

Datum: 2012-07-30 20:45:00 Tagy: fix, java, DelphiXE2

Praxe

Použití C++ Builderu pro Mac

Z jistých důvodů jsem byl nucen použít C++Builder jako cross platform řešení pro vytvoření DLL a dyLib pro výsledné použití z Delphi. Vycházelo to jako nejjednodušší varianta. Nikdy jsem neměl rád C. To se nyní změnilo - je to horší. Každopádně jsem nějakého výsledku dosáhl. Musím ale uznat, že C++Builder cross kompilaci řeší tak jednoduše jak to jen jde.

Více...

Datum: 2012-07-26 23:29:00 Tagy: OSX

Praxe

Výběr adresáře

V programu je bohužel často nutné dovolit, aby si uživatel mohl zvolit adresář (pro mladší čtenáře složku) na disku. Když budu ignorovat fakt, že jakákoliv svoboda volby uživatele zmate, dostáváme se k tomu, jak to jednoduše naprogramovat. Více...

Datum: 2012-06-25 22:40:00 Tagy: VCL, utrzky, praxe

Praxe

Vytváření dočasných komponent za běhu

Mějme klasický kód, tj. vytvoříme dynamicky za běhu formulář a modálně ho zobrazíme.

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(Application) do
  begin
    try
      ShowModal;
    finally
      Free;
    end;
  end;
end;

Nepovažuji se za nejostřejší nůž v šuplíku a tudíž se možná pletu, ale je zde malé ale. Více...

Datum: 2012-06-01 23:54:00 Tagy: praxe, VCL

Praxe

TComboBox, SelectedItem a OnChange

Narazil jsem na zajímavý problém a celkem by mne zajímal Váš názor. Jedná se o rozdíl mezi FMX a VCL verzí TComboBox.

Více...

Datum: 2012-05-23 22:34:00 Tagy: FireMonkey

FireMonkey Praxe

String a stream

Pokud potřebujeme zapisovat někam data, nebo jen předávat data do jiné části programu, je výhodné používat některý z následníků TStream. Převážná část knihovny Delphi nebo knihoven třetích stran podporuje práci se streamy. Často ale také potřebujeme jen v paměti vytvořit datový proud a ten později zpracovat.

Základní třídou je TMemoryStream. V podstatě představuje data uložená v paměti - jakoby soubor v paměti. Pro operace s ním jsou určité metody, ale přece jen by to chtělo něco čistějšího, zejména pokud pracujeme s textovými daty. Řešením je použití např. TStringWriter, TStreamWriter resp. přímo TStringStream (nebo TStringBuilder) atd.

Pro neunicode Delphi je TStringStream implementován v podstatě jen jako string, což mi přišlo pěkné. V Unicode Delphi se jedná o následníka TBytesStream (resp. TMemoryStream).

Více...

Datum: 2012-05-03 23:07:00 Tagy: začátečníci

Praxe Začátečníci

Chyba pro dnešní den

Je třeba to zveřejnit jako odstrašující případ (kód je trochu upraven)


const
  ciTabBarInterval = 0;
  ciTabBarDay = 1;
  ciTabBarWeek = 2;
var
  bIsInterval: Boolean;
…

bIsInterval:= not TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek];

Problém byl, když byl TabBar.SelectedTab.Index = 0. Takto samostatně je to evidentní že? Více...

Datum: 2012-04-19 17:40:00 Tagy: začátečníci, praxe, utrzky

Praxe Začátečníci

Problémy s TStringList

Přišel mi mail od čtenáře Jiří Milička a zkusím ho zde publikovat - třeba to někomu pomůže.

Ve zkratce tvrdí, že přišel na dvě chyby s TStringList: Více...

Datum: 2012-04-17 22:35:00 Tagy: praxe, RTL

Praxe

Problém s formátováním datumu na Vistách a výše

Pokud narazíte na problém, že na Vistách se Vám bude špatně formátovat datum (03/27/2012 místo 27.3.2012) vězte, že je to problém instalace Vista a dalších verzí, kdy je oddělovač data nastaven na dvouznakovou hodnotu. Problémem jsou zasaženy asi Delphi 7 a vyšší. Více...

Datum: 2012-03-28 21:40:00 Tagy: Vista, windows, hacky, fix

Praxe

HyperLinky v RTF - aktualizováno

Snažím se udělat v RTF hyperlink, který má skrytou část adresy. Prostě klasický odkaz, který něco zobrazuje ale odkazovaná část je jiná (Delphi na webu), s tím že v programu odkazovanou část si odchytím a místo toho zobrazím úplně něco jiného.

aktualizováno

Více...

Datum: 2012-03-27 20:31:00 Tagy: komponenty

Komponenty Praxe

AV při stisku ALTGr

Pokud používáte Delphi 7 - Delphi 2007 (možná i starší) tak dejte pozor na možný problém s pravým tlačítkem ALT (aka ALTGr). Problém byl vyřešen v D2009. Více...

Datum: 2012-02-20 21:16:00 Tagy: hacky, praxe

Praxe

Malý trik z Delphi 1 platný do dneška

Malý trik co fungoval v Delphi 1 a funguje i dnes.

Mějme na formuláři tlačítko, vybereme ho a za pomoci CTRL + X vyjmeme do schránky. Přepneme se do editoru kódu nebo do libovolného jiného editoru a dáme vložit.

V editoru se nám objeví (trošku komplikace s nabodeníčkem)

object Button2: TButton
  Left = 48
  Top = 96
  Width = 75
  Height = 25
  Caption = 'tla'#269'idlo'
  TabOrder = 1
end

Více...

Datum: 2012-02-10 20:40:00 Tagy: IDE, praxe

Praxe