Delphi

Jelentkezz be a hozzászóláshoz.

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.

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

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?

*hihi ** *

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.

AF27

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 !

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

[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


...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

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??

*hihi ** *

[negativ] Les
#64
A Database Manager -es 5let bevált köszi még 1x

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

[negativ] Les
#63
Naggyon köszi !!!

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

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

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

[negativ] Les
#58
Köszi

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

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

*hihi ** *

[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

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

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

*hihi ** *

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 😊

...:Dream as if you\'ll live forever, Live as if you\'ll die today:... ICQ: 313-755-340

nemcsakfeel
#51
hmm.
részemrõl nézegetés következik 😊

*hihi ** *

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

*hihi ** *

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?

*hihi ** *

nemcsakfeel
#46
ok, thx, találtam:

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?', );
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;

*hihi ** *

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?

*hihi ** *

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

#37
#36
Meg lehet csinálni azt hogy delphiben letiltok egyes billentyûket?

Adott egy prog amit delphiben írtam!!!

Na most azt szeretném ha lebírnám tiltani a Ctrl+Alt+Del billentyûket
Azért hogy ne lehessen így kilépni.

Megoldható???

REAL MADRID

#35
köszi, már megy is. :-)

PetruZ
#34
Ez a forrásból van idemásolva? Bár gondolom, nem fejbõl írtad be... Mindegy, elsõre észrevettem, mi a bibi: ugyan csekkold már le a Button5Click()-en belül hogy honnan olvasol, de legfõképpen azt, hogy hová írsz!

😊
#33
a problémám a button5-el van. Annak kéne a típusos fájlból szövegest csinálni.

#32
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button4: TButton;
Edit5: TEdit;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
type szemrec=record
nev,cim,mhely:string<20>;
ber:longint;
end;
procedure TForm1.Button1Click(Sender: TObject);
var f:file of szemrec;
t:textfile;
st,smhely,sber,snev,scim:string;
k:integer;
rec:szemrec;
begin
assignfile(t,'d:\delphi\roland\feladat\szöveges.txt');
reset(t);
assignfile(f,'d:\delphi\roland\feladat\tipusos.dat');
rewrite(f);
while not eof(t) do
begin
readln(t,st);
k:=pos('&',st);
snev:=copy(st,1,k-1);
delete(st,1,k);
end;
begin
k:=pos('&',st);
scim:=copy(st,1,k-1);
delete(st,1,k);
end;
begin
k:=pos('&',st);
smhely:=copy(st,1,k-1);
delete(st,1,k);
end;
begin
sber:=copy(st,1,length(st));
end;
begin
rec.nev:=snev;
rec.cim:=scim;
rec.mhely:=smhely;
rec.ber:=strtoint(sber);
write(f,rec);
end;
closefile(t);
closefile(f);
end;

procedure TForm1.Button2Click(Sender: TObject);
var t:file of szemrec;
rec:szemrec;
begin
assignfile(t,'d:\delphi\roland\feladat\tipusos.dat');
reset(t);
while not eof(t) do
begin
read(t,rec);
memo1.lines.add(rec.nev+' '+rec.cim+' '+rec.mhely+' '+inttostr(rec.ber));
end;
closefile(t);
end;
procedure TForm1.Button3Click(Sender: TObject);
var t:file of szemrec;
rec:szemrec;
begin
assignfile(t,'d:\delphi\roland\feladat\tipusos.dat');
reset(t);
seek(t,filesize(t));
rec.nev:=edit1.text;
rec.cim:=edit2.text;
rec.mhely:=edit3.text;
rec.ber:=strtoint(edit4.text);
write(t,rec);
closefile(t);

end;

procedure TForm1.Button4Click(Sender: TObject);
var t:file of szemrec;
rec:szemrec;
kernev:string;
begin
assignfile(t,'d:\delphi\roland\feladat\tipusos.dat');
reset(t);
kernev:=edit5.text;
while not eof(t) and (kernev<>rec.nev) do
begin
read(t,rec);
truncate(t);
end;
closefile(t);
end;


procedure TForm1.Button5Click(Sender: TObject);
var t:file of szemrec;
rec:szemrec;
g:textfile;
stnev,stcim,stmhely:string❤️0>;
stber:longint;
begin
assignfile(t,'d:\delphi\roland\feladat\tipusos.dat');
reset(t);
assignfile(g,'d:\delphi\roland\feladat\szoveg.txt);
rewrite(g);
begin
while not eof(t) do
begin
read(t,rec);
stnev:=rec.nev;
stcim:=rec.cim;
stmhely:=rec.mhely;
stber:=rec.ber;
begin
writeln(t,stnev);
writeln(t,stcim);
writeln(t,stmhely);
writeln(t,stber);
end;
closefile(t);
closefile(g);
end;
end.

#31
sziasztok!
szükségem lenne egy kis segítségre, van egy feladat amiben egy típusos fájlt kell átraknom szöveges fájlba. A típusos fájlnak a rekordjai:nev,cím,ber,mhely.

hogy lehet ezt megcsinálni??

#30
Köszi.

PetruZ
#29
Hát, számelméleti matematika nélkül, a legegyszerûbben a lényeg:

osszeg:=0;
utolso:=2;
while osszeg<keresett_szam do begin
osszeg:=osszeg+utolso;
utolso:=utolso+2;
end;
utolso:=utolso-2;
#28
Egy ilyet hogy kell megcsinálni:

Adja össze a páros számokat addig még az összege eléri az editboxba írt számot. Írassa ki az összeget és azt hogy melyik volt az utolsó szám.