28. februar 2002 - 15:39Der er
10 kommentarer og 1 løsning
HTML udtræk farveværdi, og angiv ny
Jeg vil gerne udtrække farveværdien for <body> delen af html'en. Hvordan gør jeg det? Så vil jeg gerne kunne tage en hvilken som helst farve (Delphi-farve) fx. clBlack og få koden til HTML farve. Jeg ved at det er det binere talsystem, men jeg ved ikke hvordan jeg regner med det i Delphi. Findes der mon et komponent eller kode som kan klare konverteringen?
1: udtræk farveværdi? Hvis du har en IHTMLBodyElement, så gøres det sådan: var Color: TColor; Browser: IWebBrowser; Document: IHTMLDocument2; Body: IHTMLBodyElement; begin if Browser = nil then Exit; if Browser.Document <> nil then Browser.Document.QueryInterface(IHTMLDocument2, Document); if (Document <> nil) and (Document.body <> nil) then Color := Document.Body.bgColor; end;
2: function ColorToHtml(Color: TColor): String; begin result := '#' + IntToHex(Color, 6); end;
det dur kun delvist dit svar cms. Jeg har et SynEdit hvor der er en linie, hvorpå der står: <body> der kunne også stå <body bgcolor="#000000"> det jeg vil er at hente ligepræcis den linie ind i en string. Derefter vil jeg trække farven for bgcolor ud, og konvertere den til en Delphi-farve, sådan at jeg kan vise hvordan bgcolor ser ud... Når det er gjort, skal brugeren have mulighed for at ændre bgcolor, til en hvilken som helst farve. Derfor skal en Delphi-farve konverteres til HTML-farve (hvilket din funktion gør glimrende) og derefter sætte den nye farvekode ind, og til sidst smide linien tilbage i SynEdit, samme sted hvor det blev taget fra... Håber det giver nogen mening :)
function HexToColor(const S: string): TColor; var I: Integer; begin I := StrToIntDef('$'+S, 0); Result := (I AND $0000FF00) OR ((I AND $00FF0000) SHR 16) OR ((I AND $000000FF) SHL 16); end;
procedure TForm1.Button1Click(Sender: TObject); Var St1, St2:string; BgColor:Tcolor; begin if pos('<body', SynEdit1.Lines.Text) <>0 then begin St1 := copy(SynEdit1.Lines.Text, pos('<body', SynEdit1.Lines.Text), length(SynEdit1.Lines.Text)); St1 := copy(St1, pos('bgcolor="', St1)+9, length(St1)); St1 := Copy(St1, 1, pos('"', St1)-1); BgColor := HexToColor(St1);
//Nu er koden i BgColor, så kan du jo: // if colordialog1.execute then // begin // colordialog1.color := BgColor; // end; end else showmessage('Ingen body!'); end;
jepper! der er bare lige en lille fejl: # må ikke være med i konversionen, for så bliver farven altid sort. derfor skal: St1 := copy(St1, pos('bgcolor="', St1)+9, length(St1)); være: St1 := copy(St1, pos('bgcolor="', St1)+10, length(St1));
oh nej! cms' virker ikke. den kludre rundt i farverne. din function virker! takker!!! sov godt :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.