Пишем FAQ |
Admin | Дата: Воскресенье, 24.08.2008, 15:49 | Сообщение # 1 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Составляем вместе список часто задаваемых вопросов - FAQ!
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
das | Дата: Воскресенье, 31.08.2008, 19:02 | Сообщение # 2 |
Ранг 1
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 1
Статус: Offline
| Помогите написать программу на (Delphi или Html) которая сохраняла бы Html страницу в *.txt зная его URL! Нужно сохранить в *.txt формате как сохраняется при деиствий Файл->Сохранить как->Тип файла='Текстовый файл' а не как ТЕГ. Мне например в день 500 URL надо сохранять! Программа вроде не сложная, просто в Delphi я не силен! Очень надо!.
|
|
| |
|
Admin | Дата: Воскресенье, 31.08.2008, 20:43 | Сообщение # 3 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Итак, вот функция сохранения текста HTML документа БЕЗ тегов из TWebBrowser. Code uses mshtml, activex;
procedure GetHtmlCode(WebBrowser: TWebBrowser; FileName: string); var htmlDoc: IHtmlDocument2; PersistFile: IPersistFile; begin htmlDoc := WebBrowser.document as IHtmlDocument2; PersistFile := HTMLDoc as IPersistFile; PersistFile.save(StringToOleStr(FileName), true); end; Естественно нужно кидать на форму TWebBrowser и в него загружать нужную страницу!
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Admin | Дата: Воскресенье, 31.08.2008, 20:52 | Сообщение # 4 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Вот быстренько написал. Работает отлично! на форме кнопка и TWebBrowser. Гружу файл с винта! можно переделать и с интернета! Code unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, mshtml, activex, StdCtrls;
type TForm1 = class(TForm) WebBrowser1: TWebBrowser; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure GetHtmlCode(WebBrowser: TWebBrowser; FileName: string); var htmlDoc: IHtmlDocument2; PersistFile: IPersistFile; begin htmlDoc := WebBrowser.document as IHtmlDocument2; PersistFile := HTMLDoc as IPersistFile; PersistFile.save(StringToOleStr(FileName), true); end;
procedure TForm1.FormCreate(Sender: TObject); begin WebBrowser1.Navigate('d:\1.html'); end;
procedure TForm1.Button1Click(Sender: TObject); begin GetHtmlCode(WebBrowser1, 'd:\1.txt'); end;
end.
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
das | Дата: Воскресенье, 31.08.2008, 21:33 | Сообщение # 5 |
Ранг 1
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 1
Статус: Offline
| Спасибо большое ВАМ! Классный форум, сразу ответили в других форумах все молчат! Респект вам! Если ВАМ не трудно, то можете помочь выяснить следующую проблему. Когда я сохраняю в ручную у меня получается следующее: -------------------------------------------------------------------------------------------------------------------- 1 664 просмотра ·30 августа*·Выбрать 4-комн. 570 000$ Мед. р-н, мкр "Самал-2", монолитный, ЖК "Самал де Люкс", 2-я очередь, черновая отделка, 2 с/у, подземный паркинг, алюм. окна, вид на горы и город, 328-19-15. ------------------------------------------------------------------------------------------------------------------- А когда сохраняю программно, т.е. по Вашей проге, то получается: ------------------------------------------------------------------------------------------------------------------ 1 664 просмотра ·30 августа*·Выбрать 4-комн. 570 000$ Мед. р-н, мкр "Самал-2", монолитный, ЖК "Самал де Люкс", 2-я очередь, черновая отделка, 2 с/у, подземный паркинг, алюм. окна, вид на горы и город, 328-19-15. ------------------------------------------------------------------------------------------------------------------ А мне желательно чтобы было как при сохранении в ручную. Может это и глупый вопрос, просто я написал прогу которая подходит более к 1 варианту(сохран. в ручную) Заранее Спасибо! Добавлено (31.08.2008, 18:33) --------------------------------------------- В принципе это нестоль необходимо, я лучше свой код переделаю. Все равно спасибо большое! С Уважением DAS!
|
|
| |
|
Admin | Дата: Понедельник, 01.09.2008, 15:04 | Сообщение # 6 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| das, тоесть нужно вторую строчку сделать всегда пустой? я правильно вас понял?
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
das | Дата: Понедельник, 01.09.2008, 15:54 | Сообщение # 7 |
Ранг 1
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 1
Статус: Offline
| Я уже свой код подстройл под Ваш, Спасибо вам за уделенное мне время!
|
|
| |
|
Improvs | Дата: Суббота, 20.09.2008, 02:01 | Сообщение # 8 |
Ранг 1
Группа: Проверенные
Сообщений: 17
Награды: 0
Репутация: 3
Статус: Offline
| С чего лутше начать в изучении делфи и как ? Сделал текстовый редактор по вашей статье для начинающих и не знаю какой сделать следующий шаг . Буду рад любому вашему совету
|
|
| |
|
Admin | Дата: Суббота, 20.09.2008, 12:32 | Сообщение # 9 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Я планировал развивать и дальше учебник. Следующий урок создание игры "Угадайка". Помоему в самый раз. И интересно и полезно. Смысл такой: компьютер загадывает число а пользователь отгадывает его. Например компьютер загадал число 46. Вы вводите в поле ввода число например 50! компьютер говорит в что загаданное им число меньше чем то которое ввел пользователь! И пользователь уже отгадывает исходя из новых данных. Конечно для усложнения сделать нужно колличество попыток. Например 10. Если за 10 раз отгадывается число то вы выиграли иначе проиграли. Теперь как примерно все это реализовать. Пусть компьютер загадывает число случайным образом: 101 чтобы от 0 до 100 включая 100. Перед этим необходимо инициализировать генератор случайных чисел. Ну а дальше по нажатию на кнопку сравнивать какое число ввел пользователь с тем которое загадал компьютер. Например: If StrToInt(Edit1.Text) > x then {сообщить пользователю что число которое загадал компьютер меньше того что введено} else {Все наоборот} Немного разъясню StrToInt - это конвертирование из строки в целочисленный тип (грубо говоря из String в Integer). В данном случае Edit1.Text типа строкового типа String. Так как нельзя сравнить число и строку то приходится переводить. Конечно в данном коде (перевода из строкового типа в целочисленный) есть свои недостатки. Например: если попытаться перевести строку содержащую символы отличные от цыфры (например, строку "54w") то произойдет ошибка. В данной программе это желательно обработать и окуратно вывести сообщение что некоректный ввод. Когда я делал программу эту то я еще добавил возможность выбора уровня сложности и выводится количество попыток. Дерзайте! Если что непонятно то пишите, помогу! Ах, да! Еще желательно сделать еще одну форму (например "о программе") чтобы разобраться как ее показать и т. д.
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Admin | Дата: Суббота, 20.09.2008, 14:48 | Сообщение # 10 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Все, написал статью http://codelab.3dn.ru/publ/28-1-0-160
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Improvs | Дата: Суббота, 20.09.2008, 16:55 | Сообщение # 11 |
Ранг 1
Группа: Проверенные
Сообщений: 17
Награды: 0
Репутация: 3
Статус: Offline
| Спасибо за статью , супер ! Возникло 2 проблемы: 1. Поменял название кнопки на "ОК" , после чего перестало писать "Больше" или "Меньше" . 2. Число где "Осталось попыток 10 " Запустив программу можно не играя в нее тыкать на это число и оно будет уменьшаться до нуля после чего напишет "Вы проиграли" и после это есле еще нажать на число то будет "255" и так по убыванию Добавлено (20.09.2008, 13:55) --------------------------------------------- С 1м разобрался . Вопрос правильно ли я сделал или можно было это сделать проще ? После того как переименовал кнопку на ОК я для нее написал код по новой , хотел изменить старый но не удалось ( ругался ) в результате старый удалил вместе с procedure для нее , верно ? Интересует , как при переименовании избежать такового ? По прежнему интересует 2й вопрос
Сообщение отредактировал Improvs - Суббота, 20.09.2008, 16:57 |
|
| |
|
Admin | Дата: Суббота, 20.09.2008, 16:59 | Сообщение # 12 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Как я понял вы переименовали саму кнопку. а нужно было только изменить на ней текст. Нужно НЕ свойство Name менять а свойство Caption Ну а уменьшается продолжает счетчик это естественно. Я описал самый минимум. Нужно после того как выводится сообщение о том что вы проиграли или выиграли просто начинать новую игру. Ну и счетчик вернуть на 10 и загадать новое число, а также желательно сообщить об этом пользователю ах да чет я не понял вы кликаете же по кнопке или по самой Label?
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Improvs | Дата: Суббота, 20.09.2008, 17:10 | Сообщение # 13 |
Ранг 1
Группа: Проверенные
Сообщений: 17
Награды: 0
Репутация: 3
Статус: Offline
| Спасибо ) Да в том и дело я кликаю по кнопке и в лабел число 10 не меняется ,сколько бы я не сделал ошибок . А вот есле я буду жать по Label то оно уменьшается даже не приходится играть , могу просто зайти в игру , тыкать на Label и число будет уменьшаться
|
|
| |
|
Admin | Дата: Суббота, 20.09.2008, 17:14 | Сообщение # 14 |
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
| Цитирую сам себя: "Но нужно будет выводить ответ программы (больше или меньше). Для этого выложим на форму TLabel. Кликнем по кнопке два раза, тем самым создадим процедуру которая будет выполняться по клику на кнопке. Отредактируйте так:" Code procedure TForm1.Button1Click(Sender: TObject); var Ent: byte; begin Ent := StrToInt(Edit1.Text); if Ent > x then Label1.Caption := 'Меньше'; if Ent < x then Label1.Caption := 'Больше'; if Ent = x then ShowMessage('Вы угадали !'); end; как я понял вы щелкнули не по кнопке два раза а по Label он и создал событие которое происходит по щелчку по Label. Выложите код всего что написали
Не оказываю помощь через личные сообщения и ICQ
|
|
| |
|
Improvs | Дата: Суббота, 20.09.2008, 17:22 | Сообщение # 15 |
Ранг 1
Группа: Проверенные
Сообщений: 17
Награды: 0
Репутация: 3
Статус: Offline
| Code unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan;
type TForm1 = class(TForm) OK: TButton; Label1: TLabel; Label2: TLabel; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Label2Click(Sender: TObject); procedure OKClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; x: Byte; // загаданное число Ent: byte; k: byte = 10; // осталось попыток
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin {Инициализация генератора случайных чисел} Randomize; x:=Random(101); // присваиваем случайное число end;
procedure TForm1.Label2Click(Sender: TObject); begin Dec(k); Label2.Caption := IntToStr(k); if k = 0 then ShowMessage('Вы проиграли!'); end;
procedure TForm1.OKClick(Sender: TObject); begin Ent := StrToInt(Edit1.Text); if Ent > x then Label1.Caption := 'Меньше'; if Ent < x then Label1.Caption := 'Больше'; if Ent = x then ShowMessage('Вы угадали !'); end;
end.
Сообщение отредактировал Improvs - Суббота, 20.09.2008, 17:23 |
|
| |
|