Funkčnost příkladů s knihy 1001 tipů a triků pro delphi
Dobrý den
Potřeboval bych poradit v Delphi 7 a to když opíši nějaký příklad s výše uvedené knihy tak při překladu nebo kompilaci tak se vyskytují chyby, zejména příklady s části INTERNET snažím se vkládat všechny komponenty co jsou zapotřebí a pořád to tomu překladači nestačí,jsou v té knize funkční příklady nebo ne?
předem děkuji za rady
V té knize jsou funkční příklady. Jen je třeba vědět, že do uses se musí přidat unity, které jsou v příkladech použity a popsány třeba na začátu kapitoly o internetu.
Pokud napíšeš konkrétní příklad, pomůžeme
Ten příklad je na 708 Indy,Traceroute na str.338,v tomto příkladě my třeba pomůžete ale když budu potřebovat jiný příklad tak kde mám získat informace které ten který příklad potřebuje jaké unity, sice tam je v úvodu adresa webu delphi-jedi.org ale já neumím skoro vůbec anglicky díky předem.
V tech prikladech nejsou potreba "externi" unity, pokud to neni v prikladu primo zmineno. Spis je treba pridat do USES nejakou unitu z InDy, popr. z WinAPI, napr. URLMon apod.
Priklad s InDy a Tracert mam na strane 248 pod cislem 647.
Jaka je konkretni chyba prekladace?
já mám 2 aktualizované vydání teto knihy na té straně je něco jiného k tomu příkladu je tam napsáno že je zapotřebí komponenta TIdIcmpClient jestli to čtu správně.ps moje ICQ je 283998726
Komonenty z InDy jsou soucasti Delphi. Najdes je na nejake palete komponent. Pokud mas verzi Delphi Personal, zrejme si je budes muset stahnout ze internetu od vyrobce. Jsou zdarma.
Jakmile polozis tu komponentu na formular, prida se ti prislusna unita do USES.
Kde dělám chybu v tomto příkladě **(tučné písmo v to řádku to vyhazuje chybu za běhu to znamená když kliknu na buton)**
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient, StdCtrls;
type
TForm1 = class(TForm)
Ping: TIdIcmpClient;
ListBox1: TListBox;
Button1: TButton;
procedure PingReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
lstReplies:Tlistbox;
implementation
{$R *.dfm}
procedure TForm1.PingReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
var sTime:string;
begin
if (AReplyStatus.MsRoundTripTime=0) then
sTime:='<1'
else
sTime:='=';
lstReplies.Items.Add(Format('%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms',[AReplyStatus.BytesReceived,AReplyStatus.FromI pAddress,AReplyStatus.SequenceId,AReplyStatus.TimeT oLive,sTime,AReplyStatus.MsRoundTripTime]));
end;
procedure TForm1.Button1Click(Sender: TObject);
var cnt:integer;
begin
Ping.Host:='www.cpress.cz';
for cnt :=1 to 4 do
begin
Ping.Ping;
application.ProcessMessages;
sleep(1000);
end;
end;
end.
Jakou chybu? Ja bohuzel na tvou obrazovku nevidim
Tak chyba je taková Project Ping.exe raised exception class EAccessViolation with message'Access violation at address 00456708 in module'Ping.exe'.Read of address 00000218'.Process stopped.Use Step or Run to continue.moc díky za pomoc
A to tvoje lstReplies je co? Kde ten objekt vytvaris a deklarujes?
var
Form1: TForm1;
lstReplies:Tlistbox;
implementation
...
.. .
A vytvareny je kde?
Pokud je to ListBox, mel by byt jako komponenta, polozena na formulari a ne nekde ve VAR. Visualni komponenty potrebuji byt nekde umisteny. Pokud to chces jen nevizualne zachytit, pouzij TStringList, ktery ovsem musis vytvorit.
Pochopitelně na formuláři taky mám umístěnou komponentu ListBox
Je uplne jedno, ze mas "nejaky" ListBox umisteny na formulari.
Jmenuje se ten umisteny na formulari lstReplies? Zrejme ne.
Abys mohl pristupvat k nejakemu objektu, musis ten objekt vytvorit. To muzes udelat bud v dobe navrhu tim, ze jej polozis na formular nebo za behu programu zavolanim konstruktoru Create.
Problem u tebe nebude v knize s priklady, ale v zakladnich znalostnich nedostatcich.
Doporucoval bych zacit serialem o Delphi, ktery vychazel na serveru Zive.cz, kde se to bralo od uplnych zacatku a pomohlo by ti to pochopit, o co vlastne v OOP jde.
Bingo !!!! děkuji už to funguje ještě bych chtěl poradit s příkladem 708 Indy,Traceroute na straně 338 v 2 aktualizovaném vydání pěkně prosím předem moc děkuji.Jinak Vám přeji hezký večer.
Jen dodam ze TlistBox nemusi mit polozenou na formulari, staci ji vytvorit
balbla := TlistBox.create(sender);
TlistBox(PageControl1.Act ivePage.Controls[0]).items....; // treba
Ještě jsi zapomněl nastavit ListBox.Parent := Form1 (jinak to bude řvát), musíš nastavit pozice na formu atd.
Pokud nepotřebuješ mít ListBox viditelný, nemá smysl používat ListBox, ale raději sáhnout po TStringList.
A co bys s tím příkladem chtěl poradit?
Na formulář musíš položit příslušnout InDy komponentu.
Jaké komponenty tam mám jmenovitě dát krom té v předchozím příkladě protože není mi jasné tyhle dva řádky príkladu procedure TForm1.Trace a lvTrace.items.clear zatím!! díky za pomoc
Pouzite komponenty na formu mas hned pod deklaraci tridy formu:
lvTrace bude v tom priklade definovano jako TListView.
procedura, pokud ji pouzivas pouze na tom formulari se definuje v sekci private, pokud ji chces volat z nejakeho jineho formulare (objektu), tak v sekci public:
Opet ti pripominam, ze bez uplne zakladnich znalosti nic neudelas. Chces ridit auto a ani nevis, co je to volant a radici paka.
Toto je můj opsaný zatím kod
ale co to za objekt TListItem to nemohu najít v záložkách ?
opět díky za pomoc
Stačí se podívat na deklaraci v první části formuláře:
Ping: TIdIcmpClient;
Ted jsem si otevrel knizku s priklady a ctu:
Poslouzi nam k tomu ta sama komponenta IdICMPClient...
TForm1.Trace je procedura. Musis v private casti formulare deklarovat:
procedure Trace;
lvTrace.Items.Clear je smazani polozek nejake komponenty. Podle nazvu soudim, ze jde o ListView. Takze na formular pridas TListView, nastavis jej do stylu Report a pojmenujes jej jako lvTrace.
zas jsem narazil na problém v příkladu aItem prosím o help
PS já to píši postupně jakmile se za tečkou neobjeví možnosti tak je problém.
Opakuji. Napřed si projdi uplne zaklady programovani v Delphi, delarace, strukturu unity. Pak se poustej do prikladu. Opet ti doporucm serial o Delphi na Zive.
Tva aItem je deklarovana v procedure Trace v sekci VAR.
Bohuzel z popisu: narazil jsem na problém v příkladu aItem prosím o help neni mozne poznat, v cem tvuj problem spociva. Vesteca koule je opet v oprave, venku je skoro tma, takze na tvuj monitor nevidim.
za tečkou se neobjevují žádné možnosti zatím se mi objevili až do řádku aItem hlásí to Unable to invoke Code Completion due to errors in source code
Protože máš v kódu předtím chyby.
Pokud spustíš kompilaci, kompilátor ti řekne, co a na jakém řádku máš špatně. Až to pospravuješ, zase ti Code completion bude fungovat.
Možná dělám chybu protože to tam dávám var aIten:TListBox místo var aIten:TListItem já ten objekt TListItem nemohu najít co to je zač a kde tu komponentu nebo co to je najdu ve které záložce a neexistuje nějaký vyhledávač na ty komponenty v prostředí delphi děkuji za pomoc
Ne vse jsou komponenty.
Nemuses misto TListItem deklarovat TListBox. Představ si, že přijdeš do obchodu a budeš chtít DVD -R médium. Prodavač ti místo toho podá 3,5" disketu. Budeš spokojený? Asi ne. Zrovna tak nebude spokojený překladač, když mu nadeklaruješ TListBox místo TListItem. I když název těch objektů začíná stejně, opravdu jde o různé věci.
Delphi obsahuje i help (mozna jsi to dosud nezjistil). Kdyz v rejstriku napises TListItem, dozvis se o co jde.
už se mi to podařilo rozjet já jsem dělal chybu v tom jak píšete protože jsem nemohl najít komponentu ListView a ta má vlastnost ListItem , a tetka mi to vypisuje čísla od 1 až 12.. to je nějaká blbost v čem je chyba zas? díky za radu
Dobrý den velice jste mi zatím pomohl už se mi to podařilo rozjet samotný program a momentálně řeším správný chod programu pří krokování se mi v proměnné IdIcmpclient.ReplyStatus.ReplyStatusType objeví stav rsErrorTTLExceeded pochopitelně mi to na to návěstí skočí, poradíte prosím opět v čem je chyba předem díky.
napište mi prosím link na ten serial na zive díky.
Je ke stažení i offline verze.
tipy-a-triky-v-delphi.wz.cz
Len vseobecne: Priklady (v knihach, ale nielen v knihach) nie su vzdy kompletne programy. Priklad sluzi na objasnenie pouzitia konkretnej veci, nie ako program na opisanie a skompilovanie.
Pri zachovani poradia:
1.)pochopit
2.)pouzit
nezvyknu nastavat problemy. Skus to v tom poradi.