Поиск по блогу

понедельник, 19 января 2026 г.

He Is Alive! или Блог-феникс :)

Всем привет. С момента последней записи прошло так много лет! Но вот я вернулась. Программисты, как и блогеры, бывшими не бывают :)

Сейчас немного осмотрюсь здесь, вспомню, что к чему. Понимаю, что с появлением соцсетей блог-платформы вроде как изжили себя. Но вчера случайно зашла в статистику парочки своих уцелевших сайтов, которыми я не занималась больше года, и была удивлена. Трафик там был!

Вот и подумала, может, и этот блог принесет какой-никакой траффик? Шальной, залетный...

Ну и расскажу о себе немного.

Я Маша. Раньше я специализировалась на парсинге, а сейчас - на автоматизации в Telegram. Пишу ботов для себя и на заказ. Могу кодить, могу собрать бюджетненько на ноу-код платформе.

Люблю, чтобы все было по полочкам. Много идей (а с ними - и пет-проектов).

Сейчас обитаю в основном в Telegram. Вот мой канал про ботов - Боты на работе @bots_at_work

Создала и продвигаю бота Держи карту - он выдает карту или текстовую подсказку по ключевому слову в комментариях канала/группах. Подходит для проведения интерактивов. Бесплатно 2 слота под колоды, 2 слота под тексты.

понедельник, 8 июля 2013 г.

Как отобразить данные SQLite в DBGrid

TSQLMonitor поддерживает SQLite, начиная с версии RAD Studio XE3 (использовать его, естественно, вместе с TSQLConnection). У меня Delphi старенькие, поэтому покажу, как старыми дедовскими методами отобразить выборку данных в DBGrid (с помощью обертки DISQLite, о которой я писала тут).

Пример работает как в Delphi 7, так и в Delphi 2010. В других версиях просто не пробовала.

Следуя шаг за шагом инструкции, приведенной ниже, вы добьетесь желаемого результата — отобразите данные из запроса к БД SQLite в стандартной таблице DBGrid.

1. Разместите на форме:
- DBGrid
- ClientDataSet
- DataSetProvider
- DataSource
Если используете визуальные компоненты, то: DISQLite3Database и DISQLite3UniDirQuery. Если визуальными компонентами от DISQLite не пользуетесь, то экземпляры этих классов создадите динамически.

2. У DISQLite3UniDirQuery в поле Database := DISQLite3Database. И заполните SelectSQL.

3. У DataSetProvider: DataSet := DISQLite3UniDirQuery.

4. У ClientDataSet: ProviderName := DataSetProvider.

5. У DataSource: DataSet := ClientDataSet.

6. У DBGrid: DataSource := DataSource. Соответственно, заполните Columns, которые бы хотели видеть отображенными в таблице.

Вот и все.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

четверг, 21 февраля 2013 г.

TChromium: заполнение и сабмит формы

Опишу самый простой способ заполнения и отправки формы с использованием компонента TChromium. С доступом к DOM-элементам по id в нем дела обстоят не так хорошо, как в Webbrowser-е, но зато очень просто исполнять любые java-скрипты.

JavaScript может пригодится не только для заполнения форм, он вообще достаточно широко используется.

Исполнение скрипта осуществляется с помощью ExecuteJavaScript. При этом обязательно проверять, чтобы Chromium.Browser и Chromium.Browser.Mainframe были отличны от nil.

Вот как будет выглядеть заполнение и сабмит формы логина на сайте vk.com.

procedure TfrmMain.btnLoginClick(Sender: TObject);
var
  CodeStr : string;
begin
  if Assigned(Chromium.Browser) and Assigned(Chromium.Browser.Mainframe) then
    begin
      CodeStr := 'document.forms[0].quick_email.value="UserEmail";';
      Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
      CodeStr := 'document.forms[0].quick_pass.value="UserPass";';
      Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
      CodeStr := 'document.forms[0].submit();';
      Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
    end;
end;

На практике столкнулась с необъяснимой ситуацией: если этот код попробовать запустить в Delphi 7, то Chromium.Browser.Mainframe почему-то будет равен nil (а если проверку убрать, то вываливается ошибка доступа). На каком-то форуме нашла, что это общая проблема для Семерки. В 2010 все работает отлично.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Поделиться