|
| Beregn højde af <TEXTAREA> Fra : Anders Johannsen |
Dato : 08-11-01 15:49 |
|
Vær hilset!
Jeg har brug for en metode til at udregne hvor mange linjer en given tekst
vil fylde i et <TEXTAREA>
Mit eget forsøg, som er vedhæftet nedenfor, har indtil videre været
frugtesløst -- det regner forkert i visse tilfælde.
Ligger nogen inde med en løsning?
function getTextboxHeight($str, $width, $minLines)
{
$lines = 0;
$pos = 0;
$line_pos = 0;
$last_pos = 0;
foreach (preg_split("/[\r\n]+/", $str) as $line) {
$lines++;
foreach (preg_split("/[ ,.]/", $line) as $chunk) {
$incr = strlen($chunk) + 1;
$pos += $incr;
$line_pos += $incr;
if ($line_pos-2 > $width) {
$line_pos = $pos - $last_pos;
$lines++;
}
$last_pos = $pos;
}
}
return (($lines<$minLines) ? $minLines : $lines);
}
/A
| |
Andreas Kleist Svend~ (08-11-2001)
| Kommentar Fra : Andreas Kleist Svend~ |
Dato : 08-11-01 19:58 |
|
On Thu, 8 Nov 2001 15:49:05 +0100
"Anders Johannsen" <anders@ignition.dk> wrote:
> Jeg har brug for en metode til at udregne hvor mange linjer en given tekst
> vil fylde i et <TEXTAREA>
Noget i den her stil? (Ikke testet):
<?
function getTextboxHeight($text, $maxwidth) {
$lines = 0;
$width = 0;
$words = explode(" ", $text);
for ($wordnr = 0; $wordnr < sizeof($words); $wordnr++) {
$width += 1 + strlen($words[$wordnr]);
if ($width > $maxwidth) {
$lines++;
$width = strlen($words[$wordnr]);
}
}
return $lines;
}
?>
Prøv at leg lidt med det og vend tilbage hvis du har problemer.
--
mvh Andreas
"Jeg er også gået over til Prin^H^H^H^HLinux"
| |
Anders Johannsen (08-11-2001)
| Kommentar Fra : Anders Johannsen |
Dato : 08-11-01 21:14 |
|
"Andreas Kleist Svendsen" <usenetnospam@nau.dk> wrote in message
news:20011108195802.68a93a8d.usenetnospam@nau.dk...
> > Jeg har brug for en metode til at udregne hvor mange linjer en given
tekst
> > vil fylde i et <TEXTAREA>
>
> Noget i den her stil? (Ikke testet):
Jeg må nok indrømme, at jeg synes at din algoritme ligner min til
forveksling, bortset fra at du, som nævnt, ikke tager hensyn til
linjeskift -- så noget i den stil havde jeg tænkt mig
/A
| |
Andreas Kleist Svend~ (08-11-2001)
| Kommentar Fra : Andreas Kleist Svend~ |
Dato : 08-11-01 20:01 |
|
On Thu, 8 Nov 2001 19:58:02 +0100
Andreas Kleist Svendsen <usenetnospam@nau.dk> wrote:
> On Thu, 8 Nov 2001 15:49:05 +0100
> "Anders Johannsen" <anders@ignition.dk> wrote:
>
> > Jeg har brug for en metode til at udregne hvor mange linjer en given tekst
> > vil fylde i et <TEXTAREA>
>
> Noget i den her stil? (Ikke testet):
Jeg har ikke taget højde for \n og \r, som du havde i dit eksempel. Men det må kunne tilføjes hvis man i første omgang kan få det til at virke uden.
--
mvh Andreas
"Jeg er også gået over til Prin^H^H^H^HLinux"
| |
Andreas Kleist Svend~ (08-11-2001)
| Kommentar Fra : Andreas Kleist Svend~ |
Dato : 08-11-01 21:30 |
|
On Thu, 8 Nov 2001 21:14:00 +0100
"Anders Johannsen" <anders@ignition.dk> wrote:
> Jeg må nok indrømme, at jeg synes at din algoritme ligner min til
> forveksling, bortset fra at du, som nævnt, ikke tager hensyn til
> linjeskift -- så noget i den stil havde jeg tænkt mig
Det har du vel egentlig ret i. Jeg må vel så hellere indrømme at jeg ikke rigtigt kiggede på din
før jeg lavede en selv.
--
mvh Andreas
"Jeg er også gået over til Prin^H^H^H^HLinux"
| |
Andreas Kleist Svend~ (08-11-2001)
| Kommentar Fra : Andreas Kleist Svend~ |
Dato : 08-11-01 21:47 |
|
On Thu, 8 Nov 2001 15:49:05 +0100
"Anders Johannsen" <anders@ignition.dk> wrote:
> Mit eget forsøg, som er vedhæftet nedenfor, har indtil videre været
> frugtesløst -- det regner forkert i visse tilfælde.
Jeg prøver lige at tjekke dit forsøg, jeg er ikke en ørn til Perl Regex, jeg er mere vant til ereg(), men lad os se:
> foreach (preg_split("/[\r\n]+/", $str) as $line) {
/[\r\n]+/ matcher også flere newlines efter hinanden. /(\r\n|\n)/ er måske løsningen?
> foreach (preg_split("/[ ,.]/", $line) as $chunk) {
Hvorfor behandler du "," og "." specielt? Så vidt jeg ved splittes teksten i <textarea> ikke ved dem. Jeg tjekkede lige efter i min Opera 5, og i den splittes der ganske rigtigt ikke ved "," og ".".
--
mvh Andreas
"Jeg er også gået over til Prin^H^H^H^HLinux"
| |
|
|