/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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"

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408942
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste