Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 41234»
Модератор форума: stalker, Ekz 
Форум » Все о Delphi » Начинающим » Пишем FAQ (FAQ по Delphi)
Пишем 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 раз отгадывается число то вы выиграли иначе проиграли.

Теперь как примерно все это реализовать. Пусть компьютер загадывает число случайным образом:

Code
x:=Random(101)

101 чтобы от 0 до 100 включая 100. Перед этим необходимо инициализировать генератор случайных чисел.
Code
Randomize;

Ну а дальше по нажатию на кнопку сравнивать какое число ввел пользователь с тем которое загадал компьютер. Например:
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
Цитирую сам себя: smile
"Но нужно будет выводить ответ программы (больше или меньше). Для этого выложим на форму 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
 
Форум » Все о Delphi » Начинающим » Пишем FAQ (FAQ по Delphi)
Страница 1 из 41234»
Поиск:

Copyright DelphiDevelop.ru © 2008-2018
Хостинг от uCoz