277
Hogyan lehet lekerdezni az IP cimet Delphiben?
  • torokvmit
    #197
    Hát ez nem pont delphi de szerintem a delphisek tudnak segíteni nekem, előre is köszönöm
    Próbléma:
    Pascalban kellene írnom olyan programot mely kiírja saját forráskódját 1 az 1 ben pliz segítsetek.
  • af27
    #196
    Hát igen. Ez mind amit elmondtatok tény és való!
    Én jelenleg ismerek egy embert, aki a mai napig unszkodik a delphi hallatán.
    Igaz ő CNC gépeket javít, de lassan már európai hírnévre tesz szert.
    Az utolsó érdekes akciója az volt, hogy egy hibás gép rendszerének a tartalmát kinyomtatta leporellóra (kb 3,5-4cm vastag köteg lett, kiterítette egy fojosón és négykézlább elkezdett az ASM kód fölött masírozni.

    Mindez egy kicsit maradinak és őskorinak tünik, de ő meg todta oldani azt a problémát, amelyet a gép gyártójának a mérnökei nem tudtak. (ja, ő nem mérnök, havi 70ért hülyére dolgozza magát).

    Ez is csak példa volt arra: HOGY A ZSENIALITÁS NEM MÁS, MINT JÓZAN PARASZTI ÉSZ ÜNNEPI RUHÁBAN!!!
  • PetruZ
    #195
    Mondjuk az 500x az túlzás :), a modern procik esetében már nem olyan jelentős az asm sebességelőnye, plusz még a compilerek is fejlődtek, nagyon szép kódokat tudnak már azok is.
  • hmhm
    #194
    és 500 gyorsabb lesz az asm :)
  • PetruZ
    #193
    De az a 20 soros Delphi programocska lesz mondjuk alsó hangon 100k (konzolnál), vagy 500k (grafikus verzióban), míg az assembly-s 5000 sor monduk max. 40-50k. :)
  • hmhm
    #192
    amit delphiben 20 sor megcsinálni, azt assemblyben 5000 :)
  • af27
    #191
    Csak egy vicc, már biztos mind hallottátok(de feleveleníteni nem rossz):
    "Amit nem lehet megcsinálni FORTRANban, azt meg lehet csinálni assemblyben. Amit nem lehet megcsinálni assemblyben, azt nem lehet megcsinálni."
  • PetruZ
    #190
    Tökmindegy, akár Delphiben is megadhatod hexa-ként, csak használd a megfelelő prefixet ('$' jel). Mivel nem használtad, a fordító decimálisnak értelmezte (azaz a '378' mindig decimális lesz, míg a '$378' mindig hexa). Mivel betű nem volt benne, még csak ki sem akadt rajta. Ami teljesen normális működés.
    A program nem a programozója akarata, hanem a kódban leírtak szerint fog működni, ez mindig igaz. :)
  • af27
    #189
    Kösz mindenkinek a segitséget.
    Tökéletesen mükszik.
  • hmhm
    #188
    lemaradtam :p
  • hmhm
    #187
    888 al kipróbáltad ?
    annak kell lennie. A képen HEXA érték van, a Word típusú változódnak meg decimális értéket adsz..

    378 h
    888 d
    1101111000 b

  • af27
    #186
    4 napos teljes mértékű szenvedéstől szabadítottal meg.
    Hálam örökké üldözni fog.

    Az volt nálam az alap probléma, hogy dos-ból megmaradt, hogy hexadecimálisan kellet megadni a port címet. Valószínüleg ha tudnék olvasni, akkor hamar rájövök, hogy it decimálisan.

    Az a lényeg, hogy köszi mindenkinek aki segített!
  • af27
    #185
    Egébként kösz szépen.
  • af27
    #184
  • PetruZ
    #183
    Nem tudom... nem tűnik fel, hogy te most nem az LPT portra, hanem máshová (történetesen a diszkvezérlőnek) küldözgetsz jeleket? A 378 az decimális érték, ami hexa 0x17A-val egyenlő. Az LPT port viszont a hexa 0x378-on van, ami decimálisan 888-as érték.
  • af27
    #182
    Kösz szépen.
  • hmhm
    #181
    holnap megteszem.
  • af27
    #180
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation
    procedure PortOut(Port:Word; Data:Byte); stdcall; external 'io.dll';
    function PortIn(Port:Word):byte; stdcall; external 'io.dll';

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    PortOut(378,255);
    end;

    end.


    és ha katt akkor reboot!
  • af27
    #179
    vagy az is jó lenne, ha küldenél nekem mellé még egy progit is amiben benne van, hogy te hogyan használod a portout-tot (vagy legalább azt a sort).

    Azt tudom, hogy miért indúl újra vindózom(védelmi hiba, kékhalál olyasmi sebességgel, hogy ki sem bírja jelezni + reboot).
  • af27
    #178
    procedure PortOut(Port:Word; Data:Byte); stdcall; external 'io.dll';

    Ugyebár, én ezt megtettem, beraktak agy button alá, de mikor rákatt, akkor újraindúl a gép.
    Ez van a button alatt:
    PortOut(378,255);
    És így nem megy, a PortIn megy, de az out nem.
    Küld már el a te io.dll-led! [email protected]


  • hmhm
    #177

    stdcall; external 'io.dll'; az eltérés
    remélem így tudod majd használni!
  • hmhm
    #176
    Chizman válasza halmai (11:50) hozzászólására előzmény | privát | 2004.07.22. 15:25 | válasz
    Helló!

    Delphi-ben qrva egyszerű, és XP alatt is müxik! Kell a project könyvtárba beraknod egy io.dll nevű progit. A lényeg, hogy a progid elérje!
    Majd:

    implementation

    procedure PortOut(Port:Word; Data:Byte); stdcall; external 'io.dll';
    function PortIn(Port:Word):byte; stdcall; external 'io.dll';

    A KIS éS NAGY BETŰK FONTOSAK!!!

    És már használatra kész is! A párhuzamos portnál nem volt semmi gond.

    Én 93LC46-os eeprom-ot programozok vele közvetlenül az LPT-n XP(!) alatt!

    A soros portnál már mellé kellett raknom a CPort-ot is, de csak inicializálásra használom. Máshogy nekem nem működött, de a CPort-nak vanna saját Properties-ei, és lehet vegyesen használni a PortIn, PortOut-tal!

    Csőváz!http://www.prog.hu/tarsalgo/Periferiak-programozasa.htm?fid=427&ec=25
  • hmhm
    #175
    de sajna kb ugyan az mint a tiéd ..
  • hmhm
    #174
    egy példa progit találtam, bár ez borland pascalos:

    program Project1;
    {$APPTYPE CONSOLE}
    uses
    SysUtils;
    var
    Port: Word;
    Data: Byte;
    procedure PortOut (Port: Word; Data: Byte); stdcall; external 'C:\io\io.dll';
    begin
    { TODO -oUser -cConsole Main : Insert code here }
    Port:=888;
    Data:=3;
    PortOut (Port, Data);
    writeln;
    writeln;
    Writeln (' Kimeneti adat a paralel porton = ',Data);
    readln
    end.
  • af27
    #173
    Hai. most már végkép ki vok!
    Letöltöttem az io.dll-t, a DLPortIO-t és még mindíg nem megy.
    A io.dll az jó lenne, de csak a port állapotának lekérdezéséhez, mivel ez is ASM-t használ. Ez nem sok ASM-ben én is le tudnám kezelni, de a vindóz egyből beleszól, hogy nehogymá...

    Valaki küldjön már egy páldát arra, hogy hogyan lehetne megvalósítani delpiben ezt a kis pascan rutint:

    Port[$378] := 255;

  • blackgamer
    #172
    TWebBrowser komponensnek meg lehet adni hogy képeket ne jelenítsen meg?
    illetve, hogy a Firefox-ot használja, mivel az gyorsabb (lehet hülyeséget írok)
  • af27
    #171
    Megvan a komponens, de újabb probléma merült fel. Nem tudom telepíteni.
    Fatal error: Unit2.dcu not fund.

    Ezzel most mit kezdjek? Naggyából követtem a readme-t.
  • af27
    #170
    Megtaláltam az io.dll-t.
    egy teljesen egyedi módon(szerintem így kell alapon) kipróbáltam, de van egy kis gond velel.

    function PortIn(Port : Word) : Byte; external 'io.dll'

    procedure TForm1.Button1Click(Sender: TObject);
    Var b : Byte;
    begin
    b := PortIn($378);
    end;

    Ez van a forrásban, de ha a gomra kattintok, akkor a gép (windózhoz méltóan), se szó, se beszé, újranindúl.

    Ha tudnátok segíteni nekem abban, hogy hogyan tudom az io.dll-t használni, akkor megköszönném.
    THX
  • hmhm
    #169
    egy megfelelő io.dll -t kell szerezned, azzal sima pascalból is megy
  • PetruZ
    #168
    Pl. torry.net - VCL - System - Port access: legalul van egy ZLPortIO komponens, ami freeware és azt írja, tud LPT-t is.
  • blackgamer
    #167
    keress rá componens pack-ot, én Com port-hoz kerestem és találtam is jókat, nézzél szét
  • af27
    #166
    Üdvözletem minden delphisnek!
    1 kérdésem lenne, nagyon fontos lenne, mivel már 1 éve próbálok megoldást keresni.
    Port (lpt) programozás delphiben, NT alapú oprendszer alatt!!!!!
    Már mindent próbáltam, hogy direkt hozzáféréssel menjen, de nem jött össze.

  • PetruZ
    #165
    A létrehozás azért nem fog működni, mert a típust röptében hoznád létre. Csinálj egy másik típust is a type részben, pl.:
    tlepestomb = array of lepes;
    Az eljárás fejében az array of lepes helyett tlepestomb legyen, ha pedig var-ral hivatkozol rá, akkor a hívó számára is ismert legyen (azaz létezzen a változó, amit átadsz).
    (A Help-ben: dynamic arrays, open array parameters)

    TBitmap: RTFM, a TBitmap.Canvas : TCanvas környéke (FillRect, stb.).
  • hmhm
    #164
    és még egy.

    TBitMap képét milyen függvényével tudom törölni?
  • hmhm
    #163
    Help!

    dinamikus tombot hogy kell allokalni?


    type tablatomb= array[0..9,0..9]of byte;
    lepes = record
    x,y : integer; // az idealis lepes pozicioja
    suly : integer; // az x,y hoz tartozo lepes mennyire jo
    jobb, bal, le, fol, // a lepes mennyit es milyen iranyban forgat
    jle, jfel, ble, bfel : integer;
    szulo : byte; // az elozo szintrol honnan szarmazik
    tabla : tablatomb; // lepeshez tartozo tabla
    end;



    function lep_add(Var klep:array of lepes;Var n:integer):boolean;
    begin
    inc(n);
    setlength(klep,n);
    end;


    erre itt a vegen kiirja hogy nem megfelelo tipus..
  • hmhm
    #162
    a sorrend kicsit hibás..

    procedure TUgralo.ugroLClick(Sender: TObject);
    begin
    n:=(n+1) mod 3;
    //-- innen
    if n=0 then ugroL.Alignment:=taLeftJustify;
    if n=1 then ugroL.Alignment:=taCenter;
    if n=2 then ugroL.Alignment:=taRightJustify;
    //-- ide
    if n=2 then
    begin
    n:=-n;
    valami.caption:='lál';
    end;
    end;


    Pedig ezt az n=2 dolgot az előző kódrészletekben jól írtad.
  • PetruZ
    #161
    Figyu', itt már alapvető gondok vannak, ha ilyen kérdések merülnek fel benned. De komolyan. Sztem kezdd újra ezt az egész programozás dolgot, mert valahol átugrottál pár lépést, és most látszik ennek az eredménye... Én meg nem fogok itt Delphi tanfolyamot tartani (mert amit kérdezel, már az).
  • zero_cool51
    #160
    köszi, majdnem megvan.
    igy néz ki:

    procedure TUgralo.ugroLClick(Sender: TObject);
    begin
    n:=(n+1) mod 3;
    if n=2 then n:=-n;
    if n=0 then ugroL.Alignment:=taLeftJustify;
    if n=1 then ugroL.Alignment:=taCenter;
    if n=2 then ugroL.Alignment:=taRightJustify;
    end;

    de az a baj, hogy nem megy el jobbra. hanem középen megáll.
    hi kihagyon az első if-et, akkor megy.
    valamint hogy lehet azt megirni, hogy ha 2-nél van, akkor változtassa meg a captionjét? az if mögé írva and-el elválasztva, ugy nem megy. még egy if kell oda?
  • PetruZ
    #159
    Akkor írd meg if...then-re, ugyanez. :)
  • zero_cool51
    #158
    kösz, megpróbálom. csak kíváncsi vagyok mit szól a tanár hozzá, mert a case-t még nem vettük.. :P
    meglátom hogy fog működni