Az idézeteket a programcikkekkel olvassuk el

I. Bevezetés

Az internet egyre inkább része az életünknek. Gyakran ülünk és nyomjuk meg a "frissítés" gombot, várva az új adatokat a kedvelt oldalon. De szükség van, és a munka egyszerre, így a feladata, hogy figyelje az oldalak hírekkel fogunk tölteni Delphi, miközben ők maguk fognak dolgozni (vagy ne vegyen részt más értelmes elfoglaltság -, mert az élet szép). Ha ez - mindent letöltözünk és bemutatjuk a számunkra megfelelő formában.

Mint "tengerimalac", számos híres idézetet választottam a Runet - bash.org.ruról. A program az idézeteket a főoldalról veszi át, és hozzáadja őket az adatbázisba. És az idézőjelekkel az adatbázisban bármit megteszhet.

II. Általános megjegyzések

A program külső felülete nem úgy tesz, mintha jutalom lenne. Nem igazán gondoltam rá, mert a fő feladat a másikban. Maga az interfész lesz, ha szüksége van rá.

Ez az alkalmazás moduláris objektum-technológiára épül (jobban tetszik a "Divide and Conquer" név). Vagyis minden entitáshoz van egy objektum, és ezek az objektumok kölcsönhatásba lépnek egymással. Mivel a köztük lévő kapcsolatok és függőségek minimálisak, egyszerűen kicserélheti és módosíthatja azokat.

Annak érdekében, hogy könnyebben megtaláljam a kódban szereplő helyet, speciális jelölőket használok. A cikk szövegében így néznek ki. A megfelelő kód megtalálásához a következőket kell tennie. Menjen a Delphi-ra, és válassza ki a View »ToDo List menüpontot. Keresse meg a megfelelő szöveget, és kattintson kétszer. És a program szövege szerint látni fogja őket .

Osztály áttekintése

Kezdjük az elemzést az osztályt kiszolgáló osztályból. Csak az ebbe az osztályba tartozó objektumok férhetnek hozzá az adatbázishoz, csak tudják, hogyan kell vele dolgozni. A többi osztály nem tudna semmit az adatbázisról.

A BBasa egység legmagasabb pontján a TBBasaCustom B1 absztrakt osztályt deklarálják. Ez az osztály csak egy módszert kínál idézőjelek hozzáadására az adatbázisban, és ez absztrakt. A munkásosztály örökölni fog. Ez azért van így, hogy lehetetlen hivatkozni más metódusokra az objektumról, amely adatokat ad hozzá, és nem törődött azzal, hogy milyen más módszerekkel rendelkezik az osztály. Nem kell neki. Csodálatosnak tűnik, de később világossá válik.

A TBBasa osztály ugyanabban az egységben kerül bejelentésre. Ez az osztály az osztályunkból örökölt, és végrehajtja az összes szükséges funkciót, nevezetesen:

Megnyitja az adatbázist létrehozásakor. Ha az alapfájl hiányzik, létrehozza. B6>

Hozzáadhat egy idézetet, mert implementálja az absztrakt módszert. B3>

Ő képes megtalálni az adatbázisban egy idézetet a számon - a módszer GetQuotes. B4>

Nézzen közelebb az állami módszerekhez. Egyikük sem fogja megmondani, hogyan és hol tárolják az adatokat. Ezért senki sem zavarja a újraírási módszereket és az idézetek tárolását szöveges fájlban vagy több fájlban. A kód többi része egyáltalán nem érzi magát. Úgy érzi, hogy ez a megközelítés hatalma a programozáshoz?

Adatbázisként SQLite-t használok.

Nézzünk néhány módszert részletesebben.

Ez a módszer B3> két paramétert kap - Szám és Szöveg - illetve az idézet számát és szövegét. Mielőtt hozzákezdene az eleji ellenőrzésekhez, és van-e már hivatkozás alapon. Ehhez kérést tesz egy adott számmal rendelkező idézetekből. Ha az ajánlat nem található (a sorok száma megegyezik nulla értékkel), akkor hozzáadjuk az adatbázisba. Természetesen elméletileg lehet, hogy több nyilvántartás lesz egy számmal az adatbázisban (pl. Programhiba), de nem bonyolítom. A módszer végén van egy SendCommand hívás. Ez a riasztás az interfész számára, hogy új idézetek vannak. Hogyan működik az alábbiakban.

GetQuotes módszer

Ez a módszer B4> az adott idézőszám alapján megtalálja és visszatér, a speciális szimbólumok eltávolítása után. Ha az ajánlat nem található - üres karakterláncot ad vissza (logikus). Érdekes, hogy ez a módszer egy másikra utal, amely "nyers szöveget" kér az adatbázisból.

IV. Áramlási osztály

Ez az osztály foglalkozik a fő munkával - letölti a főoldalt, parsit, és darabot ad az adatbázis objektumhoz. A teljes implementáció a BTread egységben van.

Amint a kódból látható, ez az osztály csak három nyilvános módszerrel rendelkezik - az építő, a megsemmisítő és a frissítési kérelem. És nincs szüksége rá.

Lássuk, hogyan működik. A T1> konstruktornál az osztály létrehozásakor hivatkozást adunk az adatbázis-objektumra, így hozzáadhatunk idézőjeleket.

A szál indítása után az Execute T2> módszer végrehajtódik. Rendkívül egyszerű - amíg végeztünk, ismételjük meg: letöltés, elemzés és várakozás. Minden művelet különállóan elválasztott ahhoz, hogy független legyen.

Oldal letöltése

A GetText oldal letöltésének módja egyszerűen visszaadja az oldal tartalmát. Ha nem szereted az Indy komponenseket valamilyen ideológiai okokból, csak cserélje ki a kóddal, ez minden. Maga a módszer is jó, mivel megmutatja, hogyan lehet létrehozni egy komponenst a RunTime-ben és hozzárendelni a módszereket.

Szünet van a letöltések között. Mivel a patakban vagyunk, szabadon írhatunk alvást. Nem lesz "interfész". De ez a funkció rossz, mert az áramlást nehéz ébredni egy ilyen álomból. És ha a programot ezen a ponton szeretnénk lezárni, akkor meg kell várnunk a függvény működését.

Éppen ezért a T5> valamivel eltérő módszert alkalmazok. A WaitForSingleObject függvényt használom, amely - az alvó állapotától eltérően - akkor is befejeződhet, ha az átadott "esemény által kiváltott esemény" befejeződött. Ez működött - a SetEvent-el költözött.

Ezért, ha idő előtt frissítenie kell, vagy le kell állítania az áramlást, akkor "az eseményt beillesztjük", és az alvás módja korán megy végbe.

V. A fő alkalmazás

Most, hogy megnéztük az összes segédtárgyat, itt az ideje, hogy összekapcsoljuk őket, és munkába állítsuk őket.

Mivel a legfontosabb funkciókat már végrehajtottuk, a kód rendkívül egyszerű. Mindenekelőtt két objektumot hozunk létre: az egyiket az adatbázisban, a másik pedig a streamet. Tegye ezt az M2> OnCreate formában. Az OnDestroy-ban, megsemmisítsen. Jegyezd meg a létrehozás és a törlés sorrendjét. Fontos.

A "frissítés" gomb ne okozzon komplikációkat. Egyszerűen felhívja a frissítési módot a szál objektumra.

visszacsatolás

Ne feledkezzen meg a SendCommand hívásról egy adatbázis objektumról? Ez a funkció a BMessage egységben van. Ő maga nagyon egyszerű - egyszerűen felhívja WinAPI SendMessage funkció, hogy küldjön egy üzenetet, hogy a fő formája, és a kilincset a fő formája vett Application.MainForm.Handle. A fő formátum elfogadja ezeket az üzeneteket, és máris önállóan hozzáfér a szükséges objektumokhoz.

Például fontolja meg az új ajánlatról szóló üzenet küldését. Az ajánlat mentése után a (z) MY_NEW_QUOTES üzenet elküldésre kerül, és az ajánlatszám a paraméterként átadásra kerül. Nem szükséges a második paraméter, és ott írunk 0-ot.

Az M7-módszert a formanyomtatványon adják meg, hogy megszakítsák ezt az üzenetet. Miután megkaptuk, egy DB objektumhoz címezzük, szám alatt megkapjuk az üzenetet, és hozzáadjuk a Memo-t.

VI. megállapítások

Természetesen ez egy nagyon durva példa, és nem jó a kiállításon. De jó, hogy ez egyfajta felkészülés az ilyen típusú programokhoz - híreket gyűjtsön, képgalériák kiszivattyúzására, adatok gyűjtésére.

És ne feledje, hogy bizonyos esetekben ezek a programok nem lehetnek barátok a törvényekkel! Legyen óvatos, és ne törje meg.

Kapcsolódó cikkek