Pomoc s Delphi7 Personal
#21
Ja som stare line mazal tak ze som nakreslil tu istu ciaru farbou pozadia... Len musis vediet povodne suradnice.
Citovat
#22
Mozno sa ti hodi...

{Funkcia rozlozi retazec podla oddelovaca do poslaneho StringListu
As_Text - rozdelovany retazec '1,2,3,4,5'
As_Odd - oddelovac ','
Asl_res - vrati stringlist bude obsahovat 5 hodnot '1' - '5'
Ab_Trim - ci sa ma po oddeleni retazec otrimovat '1 , 2' rozdeli na '1' a '2'
}

procedure RozlozString( As_Text : string; As_Odd : char; var Asl_res : TStringList; Ab_Trim : boolean = True );
var
li_pos: integer;
lch_char: char;
begin
lch_char:= As_Odd;
Asl_res.Clear;
if Length(As_Text) < 1 then
begin
Asl_res.Add(As_Text);
Exit; //Co som to len dostal ?
end;
li_pos:= Pos(lch_char, As_Text);
if li_pos = 0 then //Bez ciarky, tak co sa deje ?
begin
Asl_res.Add(As_Text);
Exit;
end;
while (li_pos > 0) do
begin
if Ab_Trim then Asl_res.Add(Trim(Copy(As_Text, 1, (li_pos-1))))
else Asl_res.Add(Copy(As_Text, 1, (li_pos-1)));
Delete(As_Text, 1, li_pos);
li_pos:= Pos(lch_char, As_Text);
if li_pos = 0 then
begin
if Ab_Trim then Asl_res.Add(Trim(As_Text))
else Asl_res.Add(As_Text);
end;
end;
end;
Citovat
#23
Díky, jak jednoduché, skvělé, geniální, ale je tu problém: Průhledný Image má na výšku 241px, udám-li souřadnice vykreslení pixelu na (0,240), tedy přesně spodní levý rožek, zbělá celý image a ten bod je průhledný.

Image1.Canvas.Pixels[0,240]:=clRed;

Druhá zajímavost: Log(1) je nula, vždycky je to nula i když v závorce provádím výpočet jako (10*0.1), (100*0.01), jen u (1000*0.001) to přesná nula není. Smile

Button1.Caption:=FloatToStr(Log10(1e3*1e-3));

Taky diky dhamane, je to je kapku složitý a nevím, zda to bude fungovat na bitmapě.
Citovat
#24
To není ani tak zajímavost, jako spíš základy výpočetní techniky Smile

Na průhlednost bych se vybod, jsou s tím akorát komplikace (pokud už neděláš třeba v OpenGL, jako že ne). Není důvod nevykreslit těch pár čar, tj. celý graf, úplně znova, vždy podle aktuálních voleb (evnt. začít na novém pozadí). Ušetříš si spoustu práce a prakticky nic to už dneska nestojí.
Citovat
#25
Základy výpočetní techniky? Pokud to je ve výsledku 1, jakože je, tak tomu nerozumím.
Znovunačíst ten graf (obrázek) jsem se už pokoušel, ale nedospěl jsem k tomu. Ta průhlednost je elegantnější, jen to má tu mouchu.
Citovat
#26
Tondo, jediný možný vysvětlení je, že to 1 není (jako že není). Už 0.1 se nedá v běžné reprezentaci zobrazit přesně. To, že ti to něco ukáže jako 1 (nebo 0), vůbec nemusí znamenat, že to je přesně. Počítače obecně nepočítají přesně, to jsem myslel těmi základy. Tady to třeba nevadí (většinou to nevadí), ale občas to dokáže nadělat dost nepříjemný problémy, je třeba s tím počítat.
Citovat
#27
Když má bitmapa nastavenou vlastnost TransparentMode na tmAuto, což je zřejmě default, považuje se barva spodního levého pixelu za průhlednou. Tolik praví Help. Když chceš čmárat i do toho rohového pixelu, musíš patrně nastavit Image.Picture.Bitmap.TransparentMode:=tmFixed a navíc možná nastavit ručně Bitmap.TransparentColor, ale to možná nebude nutné, nezkoušel jsem.

Ten příklad s Log10(0.001*1000) by tě neměl příliš překvapit. Kupříkladu ta jedna tisícina v 64bitovém floatu není 0.001 ale ve skutečnosti přibižně 0.00010000000000000002. No a co s tím dál provede výpočet toho logaritmu, ví asi jenom velcí drsňáci a ti co drátovali v procesoru floatovou aritmetiku.
Citovat
#28
Díky Boro, stačilo jen TransparentColor.



x:=430*Log10(f)

f = frekvence
430 = délka dekády v px
x = délka v px při f (x vyjde zaokrouhleno 205 při f=30)

Nepřicházím na to, jak to udělat naopak, kdy znám x a chci zjistit f. Čekám, že to bude trivialita. Smile
Citovat
#29
f := Power(10.0, x / 430.0), neboli "10 umocněno na x/430".


- Kdybys pak chtěl obecně zobrazit interval frekvencí <f0, f1> na interval pixelových souřadnic <x0, x1>, uděláš to takhle:

x := k * log10(q * f);
a nazpátek f := power(10, x/k) / q;

kde koeficienty k, q jsou:

q := power(10.0, (x1*log10(f0) - x0*log10(f1)) / (x0 - x1));
k := x0 / log10(q * f0);
Citovat
#30
MaBate, počítám, že tuhle matematiku díky xoveru umíš nazpaměť i ožralej co? :-) Mimochodem, nejsi ty céčkař?
Citovat
#31
Tyhle kupecký počty a matematika, Boramyre? Smile
Citovat
#32
Nerejpej, já bych si to musel nakreslit a odvodit :-) Tebe podezírám, že jsi to prostě vysypal.
Citovat
#33
Kdepak, kdysi dávno nakreslil a odvodil.. Smile Když už to je takhle napsaný, tak je to jasný, ale z hlavy bych to celý dohromady taky asi nedal.
Citovat
#34
Výborně Mabate, díky, kupecký počty... LOL

Doposud jsem nenašel ukládání pod PNG, dalo by se nějak dohromady spřáhnout tento program?
PNGOUT.EXE
http://advsys.net/ken/utils.htm

Ideálně, kdyby se dal integrovat do programu, chci moc, že?
Citovat
#35
Co tohle?
http://www.koders.com/delphi/fid40BF6440...network#L1

Musel by sis k tomu jen postahovat a zprovoznit knihovny, ktery to pouziva (asi libpng, aj.) - http://delphi.pjh2.de/articles/graphic/png.php#NGImage

Verim, ze neco z toho fungovat muze Smile Delphi 2009 uz to pry umi primo v ramci TImage. Jinak to pujde asi ztuha. Spustit jiny program ze sveho muzes, ale to zrejme neresi problem, ne.
Citovat
#36
Díky moc, jen jestli by se našla dobrá duše a pomohla mi to do toho Delphi to nainstalovat. Řeším ten první link: háže mi to errory, něco dělám blbě. Chce to dll file, ono to nebude fungovat pouze s PngLib.pas a PngUnit.pas? První jsem úspěšně nainstaloval přes Install Component, vyskočí mi okno níž, pak beztak nefunguje příkaz WriteBitmapToPngFile, nikde žádný Help, takže absolutně nevím co s tím.

[Image: 2_nevim.png]
Citovat