Home › Forums › A Demokészítés művészete › Programozás › Róka fogta Csuka › Reply To: Róka fogta Csuka
Ha nincs záró TAG, akkor meddig tart a center, meg a bold, meg a többi? Egy szó vagy egy sor? Biztos, hogy jó ez így, hogy nincs záró TAG? Ettől függetlenül én így csinálnám: Tudod, hogy egy sor hány pixel, legyen ez LineWidth. A teljes szöveg mérete karakterekben legyen TextLength, a mutató, ami mutatja, hol jársz a feldolgozandó szövegben pedig Index. XSize-ban tároljuk, mennyi szabad hely van még az adott sorban. FullWidth-ben tároljuk, hogy az kiírandó sor összesen hány pixel széles lesz. LineArray-ban pedig az adott sort szövegestől, TAG-estől.Ez egy C-like metakód persze (a büdös életben soha nem programoztam még C-ben, de C-64 ASM-ban sem :)), amiben helyenként csak függvény (szubrutin, function ;)) neveket írtam, amik mögött azért egy relatív hosszabb kódrészlet van nyilván.XSize = LineWidth; // az elején nyilván miénk még a teljes sor FullWidth = 0; // egy sor szélességét ebben számoljuk összeIndex = 1; // Index a szöveg első karakterén áll LineArray = array(); // ez egy üres karaktertömbYpos = 0; // a lap tetejewhile (Index <= TextLength) do // ciklus a teljes szövegre { Word = GetWord; // kiveszünk egy szót Index-től kezdve Index = Index + Length(Word); // a mutató átugorja az adott szót if (Word <> TAG) // ha nem TAG a kivett szó { Width = GetFormatedWordWidth; // kiszámoljuk az adott szó szélességét if (Width <= XSize) // elfér egy sorban { LineArray = LineArray + Word; // tároljuk a tömbünkben XSize = XSize – Width; // a szó szélességével csökkent a szabad hely FullWidth = FullWidth + Width; // Sor összélesség növelése } else XSize = 0; // nem fér el, a sor végére értünk } else // egy TAG az adott szó { // nem csak a kép, a többi TAG-et is feldolgozzuk itt if (SubStr(Word, 0, 4) == “{pic”) // ez bizony egy kép { Width = GetPicWidth; // kiszámoljuk a kép szélességét if (Width <= XSize) // elfér még a sorban { LineArray = LineArray + Word; // tároljuk a kép TAG-et a tömbünkben XSize = XSize – Width; // csökkent a szabad hely a sorban FullWidth = FullWidth + Width; // Sor összélesség növelése } else XSize = 0; // nem fér el a sorban, a sor végére értünk } else ActiveTAG = Word; } if (XSize == 0) // Ha a sor végére értünk { if (ActiveTAG == “{center}”) // ha center TAG van Xpos = (LineWidth – FullWidth) / 2; //közép kiszámolása else Xpos = 0; // ha balra igazított // mivel nem értem a TAG kezelést, így nem tudom, // hogy itt kell-e törölni az ActiveTAG-et, vagy máshol DrawLine (Xpos, Ypos); // LineArray-ből kirajzoli a sort képestől, szövegestől XSize = LineWidth; // XSize ismét a teljes sor szélessége FullWidth = 0; // nullázzuk a következő sorhoz LineArray = []; // ürítjük a tömbünket is a következő sorhoz // LineHeight-et közben lehet számolni a kép és a szöveg magasságokból Ypos = Ypos + LineHeight; // következő sor kezdő pozíciója }} // end whileA DrawLine a fentihez hasonló ciklust hajt végre, csak a LineArray-n megy végig és nem tárol, hanem rajzol (szöveget és képet).Innen már csak a kép körbefolyatást kell megoldani :) De az már csak pár plusz változó és feltétel használata :)