Delphi koodaus

delphissäoonnoobi

Delphi koodaus
Delphistä: Olen kokonaista 5 vikkoa siis opiskellut delphiä olen tehnyt tommose "keymakeri" joka siis tekee sulle key:n johonki sun syöttämään tiedostoon.
siis aika turha ja max 50 rivii koodii, joten jos jollain on tietoa delphistä voi kertoa miten esim saa "filen" ja tyylejä (kuvia ja muita) niin kertokoon.

13

247

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • themuumitalo

      mä oon yhtä noobi :(

    • Kannattaako tuollaista muinaisjäännettä opetella enää.

      • Delphi10_Seattle

        Kommentti tuokin on. Mutta Delphiä tekevä yritys on hylännyt esim. C shapin, Javan ja PHP (todennäköisesti) kannattomina valmistaa ja kehittää. Sekin on kannanotto (business näkökulma).


      • Delphi10_Seattle kirjoitti:

        Kommentti tuokin on. Mutta Delphiä tekevä yritys on hylännyt esim. C shapin, Javan ja PHP (todennäköisesti) kannattomina valmistaa ja kehittää. Sekin on kannanotto (business näkökulma).

        Delphiä tekevä yritys on vaihtanut omistajaansa aika ahkerasti kun sitä on palloteltu, että mistä nyt ihan tarkalleen ottaen puhut?

        Delphiä tekevälle yritykselle lienee kannattamatonta tehdä oikein yhtään mitään muuta jos edes Delphiäkään eikä se johdu mitenkään siitä, että esim. C#:ssa olisi vikaa vaan siitä, että Delphiä tekevällä yrityksellä ei oikein ole mitään merkitystä nykyisillä teknologiapinoilla.


      • Kdndnfnfnmd

        Se on oikeastaan aika yksi ja sama mitä kieltä opettelee. Tärkeintä siinä kuitenkin ohjelmoinnin opettelu, ei se kieli.
        Teen itsekin omaan käyttöön ohjelmia lazaruksella, kun en vaan jaksa alkaa vapaa-aikana käyttämään mitään, mitä käytän työssä 20..25 tuntia viikossa.


    • LoadFromFile
    • a----a

      Kuvan saa tuotua niin että laitat lomakkeelle (form) image-komponentin ja
      menet Picture ominaisuuteen ja klikkaa sitä ja valitset sopivan kuvan

      • delphiguru

        toki.

        2. mahdollisuus:

        Laita formille TPaintBox -komponentti, ja sen OnPaint -käsittelijässä maalataan haluttu sisältö.

        huom: jos vaikkapa siirryt hetkeksi toiseen sovellukseen (Alt-Tabilla esim. windows laskimeen tai muistioon), niin kun tulet takaisin, niin Delphi s-sovelluksesi ei automaattisesti muista, mitä tuossa PaintBoxissa oli (siis jos laskin tai muistio peitti ko. PaintBoxin), vaan sovelluksesi liipaisee tässä vaiheessa OnPaint -käsittelijän, jonka tulee vastata siitä, että haluamasi sisältö maalataan uudelleen.

        Mutta vanhemmissa Delphin versioissa esim. Png -muoto ei ole suoraan tuettu.

        Mutta kun käytät PngImage -unitia, niin sillä saa png -tuen lisättyä Delphi -sovellukseesi.

        Yksittäisten pikselien käsittely Pixels[] -propertyn kautta, ja jos kaipaat lisää nopeutta pikselien käsittelyyn, tällöin opettele käyttämään ScanLine -propertyä.


    • se_vaan_on

      En tiedä muista, mutta minulle se, että kieltä haukutaan kehumalla jotakin toista kieltä aiheuttaa reaktion, että tämä asia pitää katsoa! Nyt olen heittämässä c/c maailman romukoppaan ja siirtymässä koodailemaan pelkästään delphi/lazarus-ympäristössä. Se on sikäli merkillistä, että olen kuitenkin ko. kieliä käyttänyt yli kymmenen vuotta. Se on yksinkertaisempi käyttää ja vähemmän kryptinen kuin moni muu ympäristö. Pientä lastentautia siinä vielä on, mutta uskon - kuten monet muutkin, että tästä tulee vielä aivan uskomaton työkalu! :)

      • Delphiguru

        niin... vaikuttaa siltä, että M-Kar on Delphi -vihaaja ja C/C -fanittaja.

        Tosiasioita:

        1. Delphillä merkkijonojen käsittely on helppoa, eikä siihen liity riskiä puskurin ylivuodoista, kuten C -kielessä liittyy (syynä se, ettei C -kielessä oikeasti edes ole merkkijonoja, vaan C pakottaa käyttämään merkkitaulukoita kun kieli ei tue merkkijonoja).

        Toki, JOS joudut esim. käyttämään C -kielellä tehtyä DLL:ää Delphi -ohjelmastasi, tällöin tulee olla hyvin tarkkana merkkijonojen kanssa.
        (Rudy Velthuis:n sivulta http://rvelthuis.de/articles/ löytyy lisää hyödyllistä tietoa).

        2. Muut taulukot:

        Jos määrittelet vaikkapa 10 -alkioisen taulukon:

        C-kielessä:

        char a[10];
        char test;

        ja Delphissä esim:

        var
        a : Array[0..9] of AnsiChar; // vastaa em. c-kielen määrittelyä
        test : AnsiChar;

        niin C -kielessä tämä on aina vaarallista:

        test = a[10]; // lukee arvon, joka EI ole em. a[] -taulukossa !!!

        tai:

        a[10] = test; // ylikirjoittaa muistia, joka EI kuulu a[] -taulukkoon !!!

        Delphissäkin on oletuksena sama vaarallinen käytäntö.
        Vaarallinen käytäntö on oletuksena luultavasti siksi, että jos ei olisi, niin Delphivihaajat valittaisivat, kuinka Delphi on hidas, ainakin hitaampi kuin C -kieli.

        Mutta:

        JOS Delphissä laitat käännösyksikön (Unit) alkuun kääntäjädirektiivin:

        {$R }

        niin nyt Delphi antaa suojaa ohjelmointivirheiden aiheuttamia puskurin ylivuotoja vastaan (toki ohjelmointivirhe on silti korjattava, mutta ainakaan se ei enää aiheuta vaarallista puskurin ylivuoto -riskiä).

        eli jos tuon {$R } voimassaollessa yrität tehdä esim:

        begin
        a[10] := test; // aiheuttaa poikkeuksen, katso try - except -end
        // ja try -finally -end

        end;

        poikkeus aiheutuu juuri ENNEN kuin vahingollinen käsky suoritettaisiin - vaarallista puskurin ylivuotoa ei ehdi tapahtumaan.

        Lisäksi, voi kysyä, MIKSI C -kielessä on erikseen esim & ja && sekä ja ||, kun Delphissä selvitään AND ja OR -toiminnoilla.

        Oikea vastaus:

        Se, että C -kielessä tarvitaan erikseen & ja && johtuu siitä, ettei C -kielessä ole täsmällisesti ja yksikäsitteisesti määriteltyä TRUE -arvoa.

        C -kielessähän FALSE = 0 (kuten Delphinkin sisäisessä esitysmuodossa, mutta EI syntaksissa), mutta arvon TRUE osalta:

        C -kielessä mikä tahansa nollasta poikkeava arvo on TRUE, Delphissä taas TRUE on varattu sana, eikä sillä Boolean -tyyppisenä ole suoraa numeroarvoa, mutta sisäisessä esitysmuodossa TRUE tallennetaan AINA arvona 1.

        Siis jos:

        C - kielessä:

        int B1,B2,B3;

        ja

        Delphissä
        var
        B1,B2,B3 : Boolean;

        Niin jos sekä B1 että B2 ovat TRUE, niin

        Delphissä:

        B3 := B1 AND B2; // jos kerran B1 JA B2 ovat TRUE, silloin voidaan taata, että myös B3 = TRUE.

        Mutta C -kielessä, jos erehtyisi käyttämään bitwise AND -operaattoria noihin B1 ja B2, niin esim, jos B1 = 2 (eli C-kielen säännöillä TRUE) ja B2=4 (eli C-kielen säännöillä myös TRUE), silti B3=0 (FALSE).

        Delphissä ei tarvita erillistä logical AND -operaattoria, koska kun TRUE ei Delphissä ole mikä tahansa nollasta poikkeava arvo, vaan (sisäisessä esitysmuodossa) tasan 1 , silloin ihan normaali AND (eli siis bitwise AND, suoraan kuten esim 80386 CPU:n AND) antaa aina oikean lopputuloksen.

        Delphi on myös aito oliokieli, mutta erittäin selkeällä syntaksilla, toisin kuin vaikea C , jossa vielä tämä lisäongelma:

        JOS lähdekoodi on tehty ennen C 11 -standardia, niin vanha C -kääntäjä kääntää sen ongelmitta, mutta uudella C 11 -standardin mukaisella C -kääntäjällä kääntämisyritys tuottaa kasan kryptisiä virheilmoituksia.

        Eli siis uusi C ja vanha C ovat ihan eri asioita.

        Delphi ei myöskään pakota käyttämään olioita kuten Java.

        Delphissä olioiden käyttö on mahdollisuus, ei pakko.

        Ja: Delphin inline ASM on helppokäyttöinen ja selkeä, toisin kuin C: vastaava, jota ei edes voi käyttää opettelematta ensin käsitettä constraints (C -kääntäjälle ominainen asia).

        Delphi inline ASMissa on selkeä periaate:

        3 ensimmäistä tyypiltään kelvollista parametria menee rekistereihin EAX, EDX ja ECX, tässä järjestyksessä.

        Funktion tulos rekisteriin EAX (tai sen osajoukkoon AL tai AX), paitsi 64 -bittinen Int64 menee EDX:EAX rekisteripariin.

        Ja rutiinissa voi sellaisenaan käyttää rekistereitä EAX, EDX ja ECX,
        mutta jos haluat käyttää mitään muuta rekisteriä, tulee ne ensin tallentaa pinoon (PUSH) ja lopuksi palauttaa sieltä (POP).

        siis esim:

        push EDI
        push ESI
        push EBX

        // tässä voi käyttää myös EBX, ESI, EDI normaalien EAX, EDX ja ECX lisäksi.

        pop EBX
        pop ESI
        pop EDI

        Lisäksi, Delphi tukee säikeitä (TThread) suoraan.

        Delphin name -lisäys tuotaessa DLL -funktioita on varsin kätevä.

        Sen ansiosta voi esim. käyttää CreateFile -Windows -API -funktiota
        tai myös uudelleenmääritellä ko. funktion tuolla nimellä, vaikka itseasiassa windowsin API ei tuon nimistä funktiota exportoi, vaan

        CreateFileA ja CreateFileW -funktiot.

        Siis nuo W -loppuiset ovat Unicode -versioita.


      • 20or11

        "mutta jos haluat käyttää mitään muuta rekisteriä, tulee ne ensin tallentaa pinoon (PUSH) ja lopuksi palauttaa sieltä (POP)."
        -Pieni huomio free-pascal:sta tässä kohdassa, eli voi tehdä näin, tai sitten luetella asm-lohkon lopussa, mitä rekistereitä on käyttänyt, jolloin kääntäjä hoitaa homman:
        asm
        Movl $1,%ebx
        Movl $0,%eax
        addl %eax,%ebx
        end; [’EAX’,’EBX’];
        Nykyään ei ole pakko myöskään käyttää kamalaa AT&T-syntaksia, vaan on olemassa sisäinen versio assemblerista, jonka syntaksi on paljonkin mukavampaa, aika lähellä tasm-syntaksia oikeastaan.


      • Minä en kyllä ole kehunut tässä mitään toista kieltä. Delphi vaan alkaa olla aika kuollut juttu.

        Kieli valitaan kyllä sitten ihan projektin vaatimusmäärittelyn mukaisesti, että mikä on sopivin. Yksi kieli ei oikein sovi kaikkeen.


      • Delphiguru kirjoitti:

        niin... vaikuttaa siltä, että M-Kar on Delphi -vihaaja ja C/C -fanittaja.

        Tosiasioita:

        1. Delphillä merkkijonojen käsittely on helppoa, eikä siihen liity riskiä puskurin ylivuodoista, kuten C -kielessä liittyy (syynä se, ettei C -kielessä oikeasti edes ole merkkijonoja, vaan C pakottaa käyttämään merkkitaulukoita kun kieli ei tue merkkijonoja).

        Toki, JOS joudut esim. käyttämään C -kielellä tehtyä DLL:ää Delphi -ohjelmastasi, tällöin tulee olla hyvin tarkkana merkkijonojen kanssa.
        (Rudy Velthuis:n sivulta http://rvelthuis.de/articles/ löytyy lisää hyödyllistä tietoa).

        2. Muut taulukot:

        Jos määrittelet vaikkapa 10 -alkioisen taulukon:

        C-kielessä:

        char a[10];
        char test;

        ja Delphissä esim:

        var
        a : Array[0..9] of AnsiChar; // vastaa em. c-kielen määrittelyä
        test : AnsiChar;

        niin C -kielessä tämä on aina vaarallista:

        test = a[10]; // lukee arvon, joka EI ole em. a[] -taulukossa !!!

        tai:

        a[10] = test; // ylikirjoittaa muistia, joka EI kuulu a[] -taulukkoon !!!

        Delphissäkin on oletuksena sama vaarallinen käytäntö.
        Vaarallinen käytäntö on oletuksena luultavasti siksi, että jos ei olisi, niin Delphivihaajat valittaisivat, kuinka Delphi on hidas, ainakin hitaampi kuin C -kieli.

        Mutta:

        JOS Delphissä laitat käännösyksikön (Unit) alkuun kääntäjädirektiivin:

        {$R }

        niin nyt Delphi antaa suojaa ohjelmointivirheiden aiheuttamia puskurin ylivuotoja vastaan (toki ohjelmointivirhe on silti korjattava, mutta ainakaan se ei enää aiheuta vaarallista puskurin ylivuoto -riskiä).

        eli jos tuon {$R } voimassaollessa yrität tehdä esim:

        begin
        a[10] := test; // aiheuttaa poikkeuksen, katso try - except -end
        // ja try -finally -end

        end;

        poikkeus aiheutuu juuri ENNEN kuin vahingollinen käsky suoritettaisiin - vaarallista puskurin ylivuotoa ei ehdi tapahtumaan.

        Lisäksi, voi kysyä, MIKSI C -kielessä on erikseen esim & ja && sekä ja ||, kun Delphissä selvitään AND ja OR -toiminnoilla.

        Oikea vastaus:

        Se, että C -kielessä tarvitaan erikseen & ja && johtuu siitä, ettei C -kielessä ole täsmällisesti ja yksikäsitteisesti määriteltyä TRUE -arvoa.

        C -kielessähän FALSE = 0 (kuten Delphinkin sisäisessä esitysmuodossa, mutta EI syntaksissa), mutta arvon TRUE osalta:

        C -kielessä mikä tahansa nollasta poikkeava arvo on TRUE, Delphissä taas TRUE on varattu sana, eikä sillä Boolean -tyyppisenä ole suoraa numeroarvoa, mutta sisäisessä esitysmuodossa TRUE tallennetaan AINA arvona 1.

        Siis jos:

        C - kielessä:

        int B1,B2,B3;

        ja

        Delphissä
        var
        B1,B2,B3 : Boolean;

        Niin jos sekä B1 että B2 ovat TRUE, niin

        Delphissä:

        B3 := B1 AND B2; // jos kerran B1 JA B2 ovat TRUE, silloin voidaan taata, että myös B3 = TRUE.

        Mutta C -kielessä, jos erehtyisi käyttämään bitwise AND -operaattoria noihin B1 ja B2, niin esim, jos B1 = 2 (eli C-kielen säännöillä TRUE) ja B2=4 (eli C-kielen säännöillä myös TRUE), silti B3=0 (FALSE).

        Delphissä ei tarvita erillistä logical AND -operaattoria, koska kun TRUE ei Delphissä ole mikä tahansa nollasta poikkeava arvo, vaan (sisäisessä esitysmuodossa) tasan 1 , silloin ihan normaali AND (eli siis bitwise AND, suoraan kuten esim 80386 CPU:n AND) antaa aina oikean lopputuloksen.

        Delphi on myös aito oliokieli, mutta erittäin selkeällä syntaksilla, toisin kuin vaikea C , jossa vielä tämä lisäongelma:

        JOS lähdekoodi on tehty ennen C 11 -standardia, niin vanha C -kääntäjä kääntää sen ongelmitta, mutta uudella C 11 -standardin mukaisella C -kääntäjällä kääntämisyritys tuottaa kasan kryptisiä virheilmoituksia.

        Eli siis uusi C ja vanha C ovat ihan eri asioita.

        Delphi ei myöskään pakota käyttämään olioita kuten Java.

        Delphissä olioiden käyttö on mahdollisuus, ei pakko.

        Ja: Delphin inline ASM on helppokäyttöinen ja selkeä, toisin kuin C: vastaava, jota ei edes voi käyttää opettelematta ensin käsitettä constraints (C -kääntäjälle ominainen asia).

        Delphi inline ASMissa on selkeä periaate:

        3 ensimmäistä tyypiltään kelvollista parametria menee rekistereihin EAX, EDX ja ECX, tässä järjestyksessä.

        Funktion tulos rekisteriin EAX (tai sen osajoukkoon AL tai AX), paitsi 64 -bittinen Int64 menee EDX:EAX rekisteripariin.

        Ja rutiinissa voi sellaisenaan käyttää rekistereitä EAX, EDX ja ECX,
        mutta jos haluat käyttää mitään muuta rekisteriä, tulee ne ensin tallentaa pinoon (PUSH) ja lopuksi palauttaa sieltä (POP).

        siis esim:

        push EDI
        push ESI
        push EBX

        // tässä voi käyttää myös EBX, ESI, EDI normaalien EAX, EDX ja ECX lisäksi.

        pop EBX
        pop ESI
        pop EDI

        Lisäksi, Delphi tukee säikeitä (TThread) suoraan.

        Delphin name -lisäys tuotaessa DLL -funktioita on varsin kätevä.

        Sen ansiosta voi esim. käyttää CreateFile -Windows -API -funktiota
        tai myös uudelleenmääritellä ko. funktion tuolla nimellä, vaikka itseasiassa windowsin API ei tuon nimistä funktiota exportoi, vaan

        CreateFileA ja CreateFileW -funktiot.

        Siis nuo W -loppuiset ovat Unicode -versioita.

        "niin... vaikuttaa siltä, että M-Kar on Delphi -vihaaja ja C/C -fanittaja."

        En minä ole mitään kieltä kehunut.

        Työkalu valitaan projektin mukaan, yksi väline ei ole sopiva kaikkeen. Delphi on vaan aika kuollut, että siinä en näe järkeä. Ei oikein ole projektia missä se olisi parempi kuin joku muu työkalu.

        "1. Delphillä merkkijonojen käsittely on helppoa"

        Niinkuin on muillakin.

        "eikä siihen liity riskiä puskurin ylivuodoista, kuten C -kielessä liittyy (syynä se, ettei C -kielessä oikeasti edes ole merkkijonoja, vaan C pakottaa käyttämään merkkitaulukoita kun kieli ei tue merkkijonoja)."

        C-kieli on systeemitason kieli. Sillä tehdään lähinnä matalan tason kirjastoja, kerneliä, palikoita putkeen. Yllättävän vähän siellä tarvitsee mitään merkkijonoja missään.

        Että vähän kiinnostaa mistä projektista oikein puhut kun tunnut valitsevan väärää työkalua.

        "Delphi on myös aito oliokieli, mutta erittäin selkeällä syntaksilla, toisin kuin vaikea C , jossa vielä tämä lisäongelma:"

        Ei C ole mikään vaikea. Ohjelmoijalle joku ohjelmointikieli ei ole mikään "vaikea". Se on työkalu.

        "JOS lähdekoodi on tehty ennen C 11 -standardia, niin vanha C -kääntäjä kääntää sen ongelmitta, mutta uudella C 11 -standardin mukaisella C -kääntäjällä kääntämisyritys tuottaa kasan kryptisiä virheilmoituksia."

        Saa sen version sieltä vaihdettua.

        "Eli siis uusi C ja vanha C ovat ihan eri asioita."

        Ihan sama asia, on vain lisätty ominaisuuksia ja järkevöitetty jotain vanhoja.

        "Ja: Delphin inline ASM on helppokäyttöinen ja selkeä, toisin kuin C: vastaava, jota ei edes voi käyttää opettelematta ensin käsitettä constraints (C -kääntäjälle ominainen asia)."

        C-kieli on lähinnä korkean tason assembler, mutta se porttautuu näppärästi arkkitehtuurilta toiselle. Mitään inline ASM:ia ei käytännössä tarvitse.

        "3 ensimmäistä tyypiltään kelvollista parametria menee rekistereihin EAX, EDX ja ECX, tässä järjestyksessä."

        Tuo on jotain x86 riippuvaista kuraa. C kääntyy kaikille arkkitehtuureille.

        "Lisäksi, Delphi tukee säikeitä (TThread) suoraan."

        Säikeet ovat perusjuttuja.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Miehille kysymys

      Onko näin, että jos miestä kiinnostaa tarpeeksi niin hän kyllä ottaa vaikka riskin pakeista ja osoittaa sen kiinnostukse
      Tunteet
      132
      3827
    2. Miksi kaivattusi on

      erityinen? ❤️‍🔥
      Ikävä
      85
      1895
    3. Olen tosi outo....

      Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap
      Ikävä
      15
      1741
    4. Haluaisin jo

      Myöntää nämä tunteet sinulle face to face. En uskalla vain nolata itseäni enää. Enkä pysty elämäänkin näiden kanssa jos
      Ikävä
      54
      1402
    5. Ylen uutiset Haapaveden yt:stä.

      Olipas kamalaa luettavaa kaupungin irtisanomisista. Työttömiä lisää 10 tai enempikin( Mieluskylän opettajat). Muuttavat
      Haapavesi
      124
      1294
    6. VENÄJÄ muuttanut tänään ydinasetroktiinia

      Venäjän presidentti Vladimir Putin hyväksyi tiistaina päivitetyn ydinasedoktriinin, kertoo uutistoimisto Reuters. Sen mu
      Maailman menoa
      97
      1260
    7. Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta

      https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi
      Kotka
      37
      1259
    8. Nainen olet valoni pimeässä

      valaiset tietäni tietämättäsi ❤️
      Ikävä
      70
      1156
    9. Mitä toivot

      Tulevilta päiviltä?
      Ikävä
      69
      1033
    10. Hommaatko kinkkua jouluksi?

      Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k
      Sinkut
      102
      995
    Aihe