CSS и TWebbrowser Delphi

Мне было интересно, можно ли манипулировать CSS веб-сайтов. Например цвет в полях ввода? Я просмотрел несколько вопросов, но мне не ясно, возможно ли это вообще.

Например, в Google Chrome всякий раз, когда поле выбрано, оно показывает золотую линию вокруг внешнего сайта. Можно ли сделать это и другие вещи в delphi с любым веб-сайтом. Пишете код CSS, который применяется к веб-сайту, открытому в Twebbrowser? Только для личного просмотра

Спасибо

Могу ли я изменить цвет фона поля ввода с помощью этого кода? Я могу изменить цвет фона и изменить размер шрифта, но, похоже, не могу понять, как раскрасить или обрамить поле ввода. Это код:

http://www.delphidabbler.com/tips/58


person Lakkerw    schedule 24.02.2011    source источник
comment
Это то, что делает Chrome, и это не основано на CSS. TWebBrowser основан на IE и не выделяет поля таким же образом. Вы полагаетесь на механизм рендеринга, чтобы делать такие вещи. Вполне возможно, что через DOM можно внедрить некоторый CSS, но это будет гигантская задача.   -  person David Heffernan    schedule 24.02.2011
comment
Итак, если я правильно понял, вы хотите написать свой собственный пользовательский интерфейс Internet Explorer в Delphi (то есть вы хотите написать свой собственный веб-браузер, используя элемент управления TWebBrowser)? И затем вы хотите применить дополнительный CSS к страницам, отображаемым в этом новом браузере? Или вы хотите изменить поведение настоящего Internet Explorer на вашем компьютере?   -  person Andreas Rejbrand    schedule 24.02.2011
comment
@ Андерас Рейбранд. Да, просто мелочи, вроде того, что делает Chrome. Или раскрасьте поле синим цветом. Просто чтобы иметь представление о том, как это работает. Но, как вы говорите: примените дополнительный CSS.   -  person Lakkerw    schedule 24.02.2011
comment
@ Дэвид Хеффернан - спасибо, а нельзя ли делать такие вещи с помощью CSS?   -  person Lakkerw    schedule 24.02.2011
comment
@Lakkerw Вы хотите сделать это для всех веб-страниц?   -  person David Heffernan    schedule 24.02.2011
comment
@ Дэвид Хеффернан - да, но простые вещи, я не собираюсь полностью злоупотреблять страницей. например, сделайте хромированные вещи или заполните поле цветом.   -  person Lakkerw    schedule 24.02.2011
comment
@Lakkerw Я не хочу показаться грубым, но, поскольку вы все еще учитесь и, по-видимому, не понимаете базовой логической логики, возможно, вам стоит попробовать что-то более простое?   -  person David Heffernan    schedule 24.02.2011
comment
@ Дэвид Хеффернан - я учусь, и лучший способ - это попробовать. Это то, что я делаю...   -  person Lakkerw    schedule 24.02.2011
comment
@Lakkerw Это будет слишком сложно для тебя. CSS сложный. CSS чужого сайта очень сложен. ДОМ жесткий. DOM через IHTMLDocumentX очень сложно. Я не злой, просто это не способ учиться. Я бы не стал пытаться это делать на том основании, что мне, вероятно, будет слишком сложно добиться успеха. Я честно пытаюсь подбодрить вас и поделиться своим с трудом заработанным опытом (звучит высокомерно, но вот так!)   -  person David Heffernan    schedule 24.02.2011
comment
@Lakkerw: Я думаю, что эффективнее учиться самому и задавать вопросы только тогда, когда вы действительно застряли в чем-то. И, как сказал Дэвид, начинать нужно с простых вещей, а не с сложных вещей. Сначала нужно изучить основы.   -  person Andreas Rejbrand    schedule 24.02.2011
comment
@ Андреас Рейбранд, Дэвид Хеффернан - спасибо, я добавил немного кода, если все еще заинтересован.   -  person Lakkerw    schedule 24.02.2011
comment
Поздравляем, похоже, вы освоили буфер обмена: delphidabbler.com/tips/58   -  person David Heffernan    schedule 24.02.2011
comment
это имеет значение? это код, который я пытаюсь понять   -  person Lakkerw    schedule 24.02.2011
comment
Подсказка: на Stackoverflow вы можете опубликовать код как ответ на свой вопрос, а также выбрать его в качестве принятого ответа.   -  person mjn    schedule 24.02.2011
comment
@Lakkerw: Ничего, если я спрошу, сколько тебе лет?   -  person Andreas Rejbrand    schedule 24.02.2011
comment
Это нормально, но это не то, что я бы разместил здесь в Интернете   -  person Lakkerw    schedule 24.02.2011
comment
@Lakkerw - посмотри на количество комментариев. Есть несколько программистов Delphi (с хорошей репутацией SO), которые советуют вам замедлиться. Вы должны слушать.   -  person Leonardo Herrera    schedule 24.02.2011
comment
Не может быть так сложно, я, кажется, довольно хорошо понимаю код на этом сайте. Я просто не могу понять, как изменить цвет поля ввода или цвет текста в нем.   -  person Lakkerw    schedule 24.02.2011
comment
Нет, я не знаю, но я сделал несколько поисков по нему. кажется более сложным, чем код с этого сайта. Разве это невозможно с аналогичным кодом с этого сайта. изменить цвет поля ввода?   -  person Lakkerw    schedule 24.02.2011
comment
@Lakkerw Этот код использует DOM. Вы должны знать об этом, чтобы сделать это.   -  person David Heffernan    schedule 24.02.2011
comment
Тогда я начну более внимательно смотреть на DOM. Спасибо, Дэвид.   -  person Lakkerw    schedule 25.02.2011


Ответы (2)


Можно изменить CSS, добавив таблицу стилей из кода после загрузки страницы:

var
   document: IHTMLDocument2;
   stylesheet: IHTMLStyleSheet;
   stylesheetIndex: Integer;
begin

   // Inject CSS Style Sheets
   document := webBrowser1.Document as IHTMLDocument2;

   stylesheetIndex := document.styleSheets.length;
   if stylesheetIndex > 31 then
      raise Exception.Create('Already have the maximum amount of CSS stylesheets');

   stylesheet := document.createStyleSheet('', stylesheetIndex);
   stylesheet.cssText := ...

person jasonpenny    schedule 24.02.2011
comment
Привет, извините, я не уверен, правильно ли я понимаю. НО в stylesheet.csstext:= оттуда вы можете заполнить предпочтительный код css? - person Lakkerw; 25.02.2011
comment
Да, если вы загрузите google.com, а затем установите для cssText значение 'body { background-color: black }';, вы должны увидеть черный фон. - person jasonpenny; 26.02.2011

Используя ответ @jasonpenny, чтобы добавить таблицу стилей, вам нужно изменить границу вокруг элемента ввода, который имеет фокус, это то, что в CSS называется псевдоклассом фокуса или селектором. Для получения дополнительной информации см. эти статьи:

На сайте http://www.w3schools.com содержится огромное количество информации о веб-разработке. Это также позволяет вам играть со многими примерами, чтобы вы могли увидеть, каковы будут эффекты, когда вы что-то меняете. Если вы пытаетесь научиться создавать стили css, вам может быть лучше разобраться со всей информацией, а не пытаться одновременно изучать программирование и язык программирования.

person Marjan Venema    schedule 24.02.2011