277
Hogyan lehet lekerdezni az IP cimet Delphiben?
  • PetruZ
    #77
    Szemre jónak tűnik, bár sok helyen lehetne egyszerűsíteni rajta, de elvileg működőképes. Egyedül a 'halt' nagyon csúnya, azt ablakos környezetben nem szabad használni, ott van helyette az 'exit'. Az 'X' a helyes válasz előtti sor kell legyen (a forrás alapján). Nem lehet, hogy kicsi 'x'-et írsz a fájlba? Mert csak a nagy 'X'-re van figyelés. Az
    if s='X'...
    sorokat próbáld ki így is:
    if upperstr(s)='X'...
    Ha így sem megy, küldd el mailben a teljes projektet (összecsomagolva), meg a mintafájlt és alaposabban megnézem.
  • [negativ] Les
    #76
    Hey.
    Lenne 1 új kérdés :)
    Van 1 Quiz ami a kérdéseket 1 txt-ből olvassa be tömbönként 1 tömb = 5 sor. (5 sor = 1 kérdés 3 lehetséges válasz + 1 x)

    íme a forrás:


    unit Qiuz;

    interface

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

    const Path = 'C:\Quiz.txt';

    type
    TForm5 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form5: TForm5;
    lepes: integer;
    M: integer;

    implementation

    {$R *.dfm}

    procedure Kovetkezo;
    Var F: TextFile;
    S: String;
    i: integer;
    begin
    AssignFile(F,PAth);
    {$I-}Reset(f);{$I+}
    if IOresult<>0 then ;
    inc(lepes);
    if lepes-1=m then halt;
    for i:=1 to lepes-1 do
    begin
    readln(f,s);
    readln(f,s);
    readln(f,s);
    readln(f,s);
    readln(f,s);
    end;
    readln(f,s);form5.label1.Caption:=s;
    readln(f,s);
    if S='X' then begin
    form5.button1.tag:=1;
    ReadLn(F,s);
    form5.button1.Caption:=s;
    end
    else
    begin
    form5.button1.tag:=0;
    form5.button1.Caption:=s;
    end;
    readln(f,s);
    if S='X' then begin
    form5.button2.tag:=1;
    ReadLn(F,s);
    form5.button2.Caption:=s;
    end
    else
    begin
    form5.button2.tag:=0;
    form5.button2.Caption:=s;
    end;
    readln(f,s);
    if S='X' then begin
    form5.button3.tag:=1;
    ReadLn(F,s);
    form5.button3.Caption:=s;
    end
    else
    begin
    form5.button3.tag:=0;
    form5.button3.Caption:=s;
    end;
    CloseFile(F);
    end;



    procedure TForm5.FormCreate(Sender: TObject);
    var F: TextFile;
    S: String;
    begin
    m:=0;
    AssignFile(F,Path);Reset(F);
    while not Eof(f) do
    begin
    readln(f,s);
    readln(f,s);
    readln(f,s);
    readln(f,s);
    readln(f,s);
    inc(m);
    end;
    CloseFile(f);
    lepes:=0;
    kovetkezo;
    end;


    procedure TForm5.Button1Click(Sender: TObject);
    begin
    if Button1.Tag=1 then Label2.Caption:='Jó válasz!' else
    Label2.Caption:='rossz válasz!';
    Kovetkezo;
    end;

    procedure TForm5.Button2Click(Sender: TObject);
    begin
    if Button2.Tag=1 then Label2.Caption:='Jó válasz!' else
    Label2.Caption:='rossz válasz!';
    Kovetkezo;
    end;


    procedure TForm5.Button3Click(Sender: TObject);
    begin
    if Button3.Tag=1 then Label2.Caption:='Jó válasz!' else
    Label2.Caption:='rossz válasz!';
    Kovetkezo;

    end;

    end.

    És az lenne a gondom, hogy nicnsen olyan mint jó válasz :/.. az x utáni vagy előtti sor lenne a helyes megoldás ha jól emléxem és az x-et figyelmen kívűl kéne hagynia de nem teszi hanem 1 lehetséges megoldásnak tekinti.
    Ha pedig mögé helyezem akkor az x-et akkor a 3 választási lehetőség megvan de nincsen helyes válasz továbbra sem.

    Üdv és thx ha valakinek beugrik az a rész ahol gond van.
  • PetruZ
    #75
    Pedig elvileg az "out" és az "in" a helyes szintaktika. Nem inkább az a gond, hogy a D6-ot már NT/2K/XP gépen próbáltátok? Azok már ugyanis elvileg oprendszer szinten szabályozzák (tiltják/engedélyezik) ezeket a parancsokat, biztonsági okokból. A régi port[] tömb is már régen megszűnt, nem használható. Rákerestem a neten, ezt találtam, nekem pont ideillőnek tűnik: katt ide.
  • nemcsakfeel
    #74
    out helyett más parancsot kell aszem használni ha portról akarsz beolvasni / kiírni. nekem is volt ezzel bajom, de van rá megoldás, mert asm be sikerült kijavítani hogy működjön.
    "port" parancs nincs helyette?
  • af27
    #73
    Hali, ez delphi 5 alatt ez ment nekem, delphi 6 alatt pedig sem nekem sem a havernak nem ment. Mi lehet a probléma.

    Begin
    ASM
    Mov Ax,255
    Mov Dx,$378
    Out Dx,Ax
    End;
    End;

    Mindíg az out parancsnál ál meg, de ha in van akor is ez a probléma.
    Ugyanezt csinálja minden porttal.
  • PetruZ
    #72
    Bizonyos fájlműveletek egészen máshogyan működnek Win és Linux alatt, ezt jelzi ez a warning üzenet. Ha csak Win-es, vagy csak Linuxos cuccot írsz, akkor nem kell foglalkozni vele, nem okoz problémát.
  • DarkDemon
    #71
    Ez hol fog problémát jelenteni?
    Symbol 'FileSetAttr' is specific to a platform
  • [negativ] Les
    #70
    Nagyon köszi !
  • blackgamer
    #69
    talán ezek között találsz valamit
    Bmp, jpg kép mentése Dbase Blob mezőbe
    Delphi + Mysql + Jpg
    JPG kép kiolvasása adatbázisból
    JPG DBImage-ben
  • [negativ] Les
    #68
    Hey all

    -Újra itt 1 új kérdéssel.

    Szakgolgozatom témája 1 biosz-os program és az élőlényekhez szeretnék képet rendelni.
    Namármost a jpeg.-formátumot nem tudtuk mególdani, az a probléma, hogy nem tudom beépíteni őket az adatbázisba a bmp-k mérete meg húzós tehát nem célszerű.
    Ha valaki tudna javasólni valamit azt megköszöm :)

    Üdv


  • PetruZ
    #67
    Jut eszembe: lehet, hogy ilyen alacsony szintű fájlkezelésnél nincs is kivételkezelés és nem fog működni. Ez esetben a try...except elhagyandó, a for-nak kell a begin és a hibakezelés úgy műxik, mint a Pascal-ban:


    osszmeret:=0;
    for i:=0 to listbox2.items.count-1 do begin
    assignfile(f, listbox2.items[ i]);
    {$I-} reset(f, 1); {$I+}
    if ioresult=0 then begin
    inc(osszmeret, filesize(f)); closefile(f);
    end else begin
    // hiba volt
    ...
    end;
    end;


    Az előző kódban pár dolgot elgépeltem, de azt majd kijavítod. :)
  • PetruZ
    #66
    Ha jól értem, az első részben megpróbálsz sorban megnyitni fájlokat és ha nem sikerül, akkor a hibasfajl-nak true-nak kell lennie. Nos, ez esetben az első try blokk pont nem kivételkezelő, a finally-t cseréld le except-re. :)
    A második try..finally blokk emiatt nem is kell, az összméret számlálást emeld át az első try-be és akkor a hibasfajl kezelése is elhagyható. Pl. így:


    osszemeret:=0;
    for i:=0 to listbox2.items.count-1 do
    try
    assignfile(f, listbox.items[ i]); reset(f, 1); inc(osszmeret, filesize(f)); closefile(f);
    except
    // fájl megnyitás nem sikerült, ide jöhetnek mindenféle hibakezelő részek
    ...
    end;


    Jut eszembe: ha nem típusos fájlt nyitsz meg, a Reset()-nél kell a blokkméret is, ellenkező esetben az alapértelmezés 128 bájtos, így a FileSize() is azt adja vissza, hány 128 bájtos blokkból áll a fájl.
  • nemcsakfeel
    #65
    ez kész.. ennyire hülye lennék a kivétel kezeléshez???

    for i:=0 to ListBox2.Items.Count-1 do
    begin
    hibasfajl:=false;
    try
    AssignFile(f,Listbox2.Items[ i]);
    Reset(f);
    ...
    finally
    hibasfajl:=true;
    end;
    if hibasfajl=false then begin
    try

    ..
    osszmeret:=osszmeret+Filesize(f);
    CloseFile(f);
    finally
    end;
    end;
    [/center]
    a fájlok egy részét sikerül megnyitnia, viszont másoknál invalid filaname-t ír:( nem tetszik neki a 91 karakteres elérési út?? ááá nemértem.
    másrészt meg a Filesize -os blokkot nem hatja végre, mi lehet a baja??
  • [negativ] Les
    #64
    A Database Manager -es 5let bevált köszi még 1x
  • [negativ] Les
    #63
    Naggyon köszi !!!
  • PetruZ
    #62
    Úgy értettem: a TListbox.Items már önmagában egy TStrings típus, nincs Strings aleleme (pontosabban igen, van, de ez a default property is, úgyhogy elhagyható (ld. VCL Help)). Az Items bármely eleme tömbként elérhető (Items[ index]), ami stringet ad vissza. Az index max. értéke az Items.Count-1.
    Ha nem ezt kérdezted, akkor passz, írd jobban körbe. :)
  • PetruZ
    #61
    Benne van pl. a Jedi-VCL komponenscsomagban (www.delphi-jedi.org).
    De ha nagyon kell, megnézem neked, hogy pontosan mi kell hozzá (most lusta vagyok előkeresni, fejből meg nem tudom :) ).
  • PetruZ
    #60
    Huhh, hát ez nem egy kétperces kitt-katt dolog, ehhez azért több háttérinfó is kell. Én mysql-t javasolnék otthoni próbálgatásra, viszonylag egyszerűen fel lehet rakni, service-ból fut, vagyis bármikor ki/be kapcsolgatható (persze "élő" kapcsolat esetén nem ajánlott). Delphi-ből is el lehet érni pl. ODBC-n keresztül. Bár ezek a legegyszerűbb dolgok, így is előfordulhat szütykölődés.
    Bár a Delphi-nek van erre funkciója is: Database Manager. Ezzel lehet pár beépített típusú adatbázist létrehozni, amelyek nem szerverek ugyan (mivel azt a funkciót ez esetben tkp. a BDE látja el), de szinte mindent ki lehet próbálgatni rajtuk. Az alap SQL funkciókat (create, insert, delete, select, ...) bármely alaptípus ismeri.
  • [negativ] Les
    #59
    Közben valószínű, hogy számotokra ez még 1 uncsi kérdés :) :

    Tehát még nem hálózatban hanem csak 1 gépen szeretnék sql-ezni delphi-ben.

    kaptam 1 ilyet: appserv azt reméltem ezzel tudok 1 stand alone server-t csinálni de nem jött össze valmiért :/
    Az lenne a gondom, hogy nincs hova csatlakozni.. és a gépemen szeretnék 1 sql server-t üzemeltetni, hogy legyen ;)

    Greetings

  • [negativ] Les
    #58
    Köszi
  • nemcsakfeel
    #57
    #PetruZ: nekem delphi 6 ban vannak az itemsnek elemei :))
    kivételként kiíratom üzenetként hogy milyen nevű fájlt nem tud megnyitni, és ott tökéletes a neve :(



    hmm talán így látni is fogjuk:


    // atw ről így linkelj:
    http://users.atw.hu/felhasználónév/kép.jpg
  • [negativ] Les
    #56
    Hát Így:





    Amúgy ezt 1 másik prog-ból lestem el és reménykedem, hogy nálam is beválik..
    ha nem jelenne meg a kép : http://www.les.atw.hu/sample/sample.JPG

    Köszi mindent !!

    üdv
  • PetruZ
    #55
    Nem kell oda a Strings, elég a listbox1.items[ i]. Az items property önmagában egy TStrings típus, neki már nincs ilyen aleleme.
  • nemcsakfeel
    #54
    újabb probléma :)
    ListBox ban vannak elérési útvonalak, fájlok pontos neveivel.

    de
    AssignFile(f,Listbox2.Items.Strings[ i]);

    mindegyik hozzárendelésnél hibár ít ki :(
    ékezet nélküli, space nélküli létező fájlok..
  • PetruZ
    #53
    Milyen infókat? Milyen formában?
  • [negativ] Les
    #52
    Hey. Szeretnék 1 olyat, hogy ha az about button-ra klikkelek akkor kiírja az infókat a progról.
    (delphi 6)

    begin
    ShellAbout(Handle, 'Biosoft v Beta 0.4', 'Les', Application.Icon.Handle);
    end;


    Thx

    ps. nem rég kezdtem tehát még nagyon lama vagyok :)
  • nemcsakfeel
    #51
    hmm.
    részemről nézegetés következik :)
  • PetruZ
    #50
    Felesleges ezzel vacakolni: vannak már erre megírt komponensek, sztem használd azokat. A torry.net-en biztos találsz ilyet, de pl. a Jedi-VCL-ben is van.
  • nemcsakfeel
    #49
    első lépésben DDE vel kapcsolódnék a winamphoz, és parancsokat küldözgetnék neki..
  • PetruZ
    #48
    Mire gondolsz pontosan / mit akarnál csinálni?
  • nemcsakfeel
    #47
    újabb kérdés..

    hogy lehet fájl tipushoz hozzárendelt programot elérni?
    DDE kommunikációról tudnál írni?
  • nemcsakfeel
    #46
    ok, thx, találtam:
    [i]
    procedure TForm1.Save1Click(Sender: TObject);

    var
    NewFileName: string;
    Msg: string;
    NewFile: TFileStream;
    OldFile: TFileStream;
    begin
    NewFileName := ExtractFilePath(Application.ExeName) + ExtractFileName(Edit1.Text);
    Msg := Format('Copy %s to %s?', [Edit1.Text, NewFileName]);
    if MessageDlg(Msg, mtCustom, mbOKCancel, 0) = mrOK then
    begin
    OldFile := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
    try
    NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead);

    try
    NewFile.CopyFrom(OldFile, OldFile.Size);
    finally
    FreeAndNil(NewFile);
    end;
    finally
    FreeAndNil(OldFile);
    end;
    end;

    end;
  • PetruZ
    #45
    Hát, ha nem akarsz sokat vacakolni, akkor írd meg TFileStream-ek használatával (használt a CopyFrom() metódust).
    Egyébként ilyen másolásos dolgokra az SHFileOperation() WinAPI függvény is használható, bár ennek a kezelése bonyolultabb. Parancssor hívására meg a CreateProcess() (is) használatos.

  • nemcsakfeel
    #44
    hogy lehet rendszer parancsot hívni?
    pl. System("copy %src %dst")
    ilyesmi kéne pl. fájlmásoláshoz..
    vagy egyszerűbb saját rutint írni rá blockread-,blockwrite-al?
  • DarkDemon
    #43
    megoldottam thx
  • PetruZ
    #42
    2. Timage.Canvas.ClipRect property.
  • DarkDemon
    #41
    1. Rájöttem a screen.width screen.height megadja
    2. ?
  • DarkDemon
    #40
    1. ez esetben hogyan lehet megtudni az aktuális felbontást?
    2. nem nagyítani akarok, csak az a probléma ha nagyobbra méretezem akkor sem rajzol arra a területre, amit a nagyobbra méretezéssel nyertem
  • PetruZ
    #39
    1. Nincs ilyen közvetlen parancs. A Form.Resize event-ben neked kell erről gondoskodni (a Form.Top, Form.Left-et kell állítgatni az új méret és a desktop méret arányában).
    2. A ReSize nem egyenlő a ReScale-el, azaz ha átméretezel valamit, az nem gayítja fel a dolgokat. Ha pl. egy TImage-t méretezel, akkor nő a hozzá tartozó Canvas szélessége és magassága is, de ez nem nagyítást jelent. Közvetlen nagyító parancs sincs, ezt is neked kell megírnod.
  • DarkDemon
    #38
    üdv, lenne 2 problémám
    kisebbik, ha program futása közben átméretezem az ablakot hogy lehet egy utasítással azt a képernyő közepére tenni ? (mint futtatás előtt Position-poScreenCenter)
    nagyobbik probléma, van egy TImage objektum, futás közben a program rajzol rá stb. de ha nagyobbra méretezem az objectumot, akkor is csak az eredeti méret területén tudok rá rajzolni. miért nem méretezi át rendesen ?
    kössz a helpet