Audioweb.cz
Pomoc s Delphi7 Personal - Printable Version

+- Audioweb.cz (https://www.audioweb.cz)
+-- Forum: Ostatní (https://www.audioweb.cz/forumdisplay.php?fid=16)
+--- Forum: Smetiště (https://www.audioweb.cz/forumdisplay.php?fid=21)
+--- Thread: Pomoc s Delphi7 Personal (/showthread.php?tid=7082)

Pages: 1 2


Pomoc s Delphi7 Personal - dhaman - 22. 2. 2010

Ja som stare line mazal tak ze som nakreslil tu istu ciaru farbou pozadia... Len musis vediet povodne suradnice.


Pomoc s Delphi7 Personal - dhaman - 22. 2. 2010

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;


Pomoc s Delphi7 Personal - antonio - 23. 2. 2010

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


Pomoc s Delphi7 Personal - MaBat - 23. 2. 2010

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


Pomoc s Delphi7 Personal - antonio - 23. 2. 2010

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.


Pomoc s Delphi7 Personal - MaBat - 23. 2. 2010

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.


Pomoc s Delphi7 Personal - Boramyr - 23. 2. 2010

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.


Pomoc s Delphi7 Personal - antonio - 8. 3. 2010

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


Pomoc s Delphi7 Personal - MaBat - 8. 3. 2010

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);


Pomoc s Delphi7 Personal - Boramyr - 9. 3. 2010

MaBate, počítám, že tuhle matematiku díky xoveru umíš nazpaměť i ožralej co? :-) Mimochodem, nejsi ty céčkař?


Pomoc s Delphi7 Personal - MaBat - 10. 3. 2010

Tyhle kupecký počty a matematika, Boramyre? Smile


Pomoc s Delphi7 Personal - Boramyr - 10. 3. 2010

Nerejpej, já bych si to musel nakreslit a odvodit :-) Tebe podezírám, že jsi to prostě vysypal.


Pomoc s Delphi7 Personal - MaBat - 10. 3. 2010

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.


Pomoc s Delphi7 Personal - antonio - 19. 3. 2010

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?


Pomoc s Delphi7 Personal - MaBat - 19. 3. 2010

Co tohle?
http://www.koders.com/delphi/fid40BF644033E74AAA12059BD7F649F3AD7A500B2E.aspx?s=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.


Pomoc s Delphi7 Personal - antonio - 19. 3. 2010

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]