Delphi programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


QG
(tag)

Mielott barki javasolna, hogy ezt a prog.hun tegyem fel, kozlom megtortent, de azok jo munkasemberek, csak reggel jarnak arra, nekem meg most kene.

Szoval, hogyan ellenorzom Delphiben egy komponens letezeset?

if Button3 letezik then
begin
.
.
end;

szoval hogy lehet ezt jol?

QG


Giruna
(tag)

Ha kézzel tetted le akkor a visible vagy ehez hasonló tulajdonsásgát kéne megnézned ha true, akkor létezik. Ha kódból teszed ki, akkor pedig szintén ezt vagy valamely hasonló property-jét kéne nézegetni.


Alan
(aktív tag)

...ehm, és akkor rögtön jön az access violation a 00000000 címre hivatkozással. Súlyos hiba létre még nem hozott komponensek tulajdonságait vizsgálgatni.

A helyes módszer: if Assigned(Button1) then ...


Alan
(aktív tag)

Arról nem is beszélve, hogy egy éppen nem látható komponens (Visible = False) még nagyon is létezhet és virulhat.


Divi
(aktív tag)

============ Attention ============
Delphi 6

Szeretnék írni egy ''komolyabb'' programot ami igen sok adatot kezel.
Az, hogy Adatbázisban vagy egy jól megszerkesztett TEXT fájlban tárolja le az adatokat 1 dologtól függ. Hogy van-e rá mód, hogy a text fájlomat úgy kezeljem, ahogy szeretném, azaz...

Hogyan lehet Delphi alatt egy már MEGLÉVŐ text file egy sorát átírni jeletősebb macera ( fájl újraírás) nélkül?

Magam nem találtam semmi olyan parancsot ami egy text file SOR mutatóját állítani tudná, és hogy az adott sort kiolvassa majd visszaírja valami más adattal!

Help me please!


KovacsUr
(addikt)

if Assigned(Button3) then
//jaj de jó!
else
//nem jött be


Divi
(aktív tag)

(#1) QG Válasz | Email | 2003-11-14 01:21:42

msg#5 itt a lényeg :D

[Szerkesztve]


KovacsUr
(addikt)

Jól van na, a moderátor is ember. Vagy mi. :DDD

(Mellesleg látom, #3-ban már a válasz is elhangzott :) )


KovacsUr
(addikt)

A fájl újraírása nélkül ez nem fog menni sem Delphiben, sem másban. A szövegfájlt csak szekvenciálisan tudod elérni. Gondolj csak bele.


Divi
(aktív tag)

Ötlet:
És ha mondjuk mitadisten a Fájl egy File of String; (hogy tudom rávenni, ,hogy többet tudjon letárolni mint 255 karakter?
akkor már működik a Seek és lehet módosítani is :)

Azért iggen kellett a hozzászólásod, hogy ez kipattanjon a fejemből :D

Gondolom te akkor benne van a programozósdiban. Az elkövetkezőkben tudnál egy kis figyelmet fordítani a hülye kérdéseimnek? :U (ha nem okoz nezézséget)


zenit
(tag)

Használhatod ezt:
type TItem = array[0..1023] of Char;
Ezzel 1023 karakter hosszú szöveget tudsz tárolni (plusz egy lezáró #0 karakter). Így már mehet a file of TItem, ahol a rekord mérete 1024 bájt lesz.

String (S) -> TItem (Item) konverzió a fájl írásához:
StrLCopy(Item, PChar(S), SizeOf(Item) - 1);

Olvasás után pedig csak egyszerű értékadás kell: S := Item;

Halkan megjegyezném, hogy a file of ... használata Delphi-ben elavult dolognak számít, helyette használj inkább TFileStream-et. :U


Divi
(aktív tag)

Ki tudnád feljteni pozitívumait/negatívummait?

Egy barát már ajánlotta, de mivel ez eddig teljesen ismeretlen dolog számomra, hogy mi is egyáltalán így jó volna egy kis felhomályosítás, hogy mivel tud többet
és hogyan kell vele megcsinálni, azt amit a sima ''File of'' -fal is meglehet :)

[Szerkesztve]


KovacsUr
(addikt)

...Csak hát ez így már nem szövegfájl, hanem egy 1024 byte hosszú rekordokból álló típusos fájl. :)


KovacsUr
(addikt)

Az elkövetkezőkben tudnál egy kis figyelmet fordítani a hülye kérdéseimnek? :U(ha nem okoz nezézséget)

Megpróbálok, ha nem gond, hogy néha kések egy-két hetet a válasszal... :)


zenit
(tag)

A TFileStream a fájl egyszerű bájt-szintű elérésére való, annak minden előnyével és hátrányával. Egyrészt közvetlenül a Windows API-re épül, szóval hatékony - bár ez ma már inkább csak elvi dolog, bár annak nem utolsó :).
Másrészt meg a VCL mindenhol a TStream osztályt használja, ami néhány alapműveletet definiál, a leszármazottai pedig (így a TFileStream is) ezeket implementálják.

Szóval érdemesebb neked is inkább ebbe az irányba haladni, mert később sokat fogod használni őket, ill. ezért nem érdemes már a pascal-os ''file'' típusba jobban belemélyedni. (Talán még a ''Text'' fájltípusnak van egyedül létjogosultsága, mert erre nem létezik elfogadható alternatíva, bár az más kérdés, hogy valóban szükség van-e rá.)


zenit
(tag)

De arra már te is rávilágítottál az előbb, hogy a szövegfájl, mint adatszerkezet, nem lesz jó.


BaliTHC
(tag)

Amennyiben a kérdéses Button3 nem publikusan deklarált (pl. dinamikusan került fel a Form-ra), akkor használható a

function FindComponent(const AName: string): TComponent;

művelet, ami név alapján megadja a keresett komponenst, vagy NIL-t.


Szenty
(tag)

Szia!

Mit jelent az, hogy igen sok adatot kezel? Több száz gigabyte-ot? Vagy sokat számol a program, és az eredményt (ami akár lehet kevés is) tárolná szövegfájlban? Fejtsd ki légyszi kicsit részletesebben!

Egy jó tanács: felejtsd el a szövegfilet, az soha nem is volt alkalmas adatbázisok tárolására (lásd kismillió féle CSV-formátum). Tanulj meg kezelni valami SQL-alapú adatbázist inkbább. (No meg az SQL-t)
Rengeteg szenvedéstől fogod megkímélni magad.

[Szerkesztve]


b14
(senior tag)

Hi
Ez a prog ''tikositana'' bar nem nagy cucc de szeretnem meg csinalni.
Mi benne a hiba?


var i:integer;
c:char;
s:Pcaption;
begin
for i:=1 to length(form1.Edit1.Text) do
begin
c:=chr(255-(ord(form1.Edit1.text)));
s
:=c;
form1.Edit1.Text:=s;
end;

szerkesztett:
Ezt a hibauzenetet adja:

Project Project1.exe raised exception class EAccess Violation with message 'Acess violation at address 0044F14A in module 'Project1.exe'. Write address 00000000'. Process stopped. Use Step or Run to continue.

[Szerkesztve]


VladimirR
(nagyúr)

a form1.edit1.text-et ne egyben, hanem karakterenkent titkositsd - visszavonva; az i-t kicsereltem j-re, mert igy dolt lett az egesz:DDD

valamint a ciklusod is zavaros kicsit

var j:integer;
c:char;
s: tcaption;
t:string;
begin
t:=form1.Edit1.Text;
for j:=1 to length(t) do
begin
c:=chr(255-(ord(t[j])));
s:=s+c;
end.
form1.Edit1.Text:=s;
end;

[Szerkesztve]

üzenetek