Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 242
от 18.09.2005, 22:49

Администратор:Калашников О.А.
В рассылке:Подписчиков: 244, Экспертов: 49
В номере:Вопросов: 4, Ответов: 12


Вопрос № 26242: Здравствуйте эксперты! Суть вопроса: Мне необходимо сделать "Автоматическое обновление программы" через сеть (локальную, модем) и скачать с моей странички файл, например version.txt, в котором содержится версия программы вылаженная на с...
Вопрос № 26261: К вопросу 26208 Dennisss'у Вот именно в вашем примере, именно что не получается записать етот буфер типа wideString в файл. А с стримами уже пробовал. К примеру попробуйте записать в нетипизированный файл строку widestringa арабскими, румын...
Вопрос № 26301: Здравствуйте эксперты. Известно одно из полей записи(record). Как прочесть из файла только те записи, которые содержат это поле?...
Вопрос № 26302: Здавствуйте Експерты!! У меня вопрос к Вам. Как сделать, чтобы после нажатии на кнопку Button1 появлялся Hint под стрелкой мыши (мышей в это время можна двигать в любые стороны) и Hint держался до тех пор, пока не будет нажата кнопка мышк...

Вопрос № 26.242
Здравствуйте эксперты!
Суть вопроса: Мне необходимо сделать "Автоматическое обновление программы" через сеть (локальную, модем) и скачать с моей странички файл, например version.txt, в котором содержится версия программы вылаженная на сервер, то есть на моей страничке. После чего сравнить с имеющейся на компьютере версией и закачать обновление.
1. Какие компоненты в Delphi делают всю работу с сокетами (подозреваю, что Indy).
2. Как запрограммировать это всё (ВАЖНО)!
3. Как скачать файл имеющийся на сервере.
Отправлен: 13.09.2005, 04:45
Вопрос задал: Подболотов Иван Алексеевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, Подболотов Иван Алексеевич!
Можно проводить операции с файлом - будто он локальный CopyFile
C заданием адреса типа http://www.serv.ru/file.txt
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 13.09.2005, 07:54
Оценка за ответ: 5
Комментарий оценки:
Помогло, огромное спасибо!

Отвечает: Татьяна
Здравствуйте, Подболотов Иван Алексеевич!
1. Если вам необходима простая закачка, самое простое использовать компоненту NMHTTP (обычно она находится во вкладке FastNet или, я думаю, вы без проблем ее скачаете)
2, 3. см. приложение

Приложение:

---------
Нет ничего невозможного!!!

Ответ отправила: Татьяна (статус: 2-ой класс)
Отправлен: 13.09.2005, 11:36

Отвечает: Силантьев Евгений Александрович
Здравствуйте, Подболотов Иван Алексеевич!
1.Indy - очень мощные компоненты!
Если вам не требуется всей функциональности этих компонент, например, надо только реализовать функции GET или POST протокола HTTP, то можно поискать на сайтах с компонентами, вроде torry.ru – там обязательно сыщется много различных библиотек, по большей части бесплатных, и с исходным кодом.
2.Я бы сделал это используя Internet WinAPI.
3. Есть такая функция UrlDownloadToFile не забудте подключить ShellApi и URLMon.
Пример:
UrlDownloadToFile(nil, PChar('http://img.yandex.ru/i/logo76x44.gif'), PChar('c:logo76x44.gif'), 0, nil);


---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 5-ый класс)
Отправлен: 13.09.2005, 12:11


Вопрос № 26.261
К вопросу 26208 Dennisss'у

Вот именно в вашем примере, именно что не получается записать етот буфер типа wideString в файл. А с стримами уже пробовал. К примеру попробуйте записать в нетипизированный файл строку widestringa арабскими, румынсками, грецкими, итд буквами.

Приложение:

Отправлен: 13.09.2005, 11:11
Вопрос задал: Negruzzi Cristian (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Denisss
Здравствуйте, Negruzzi Cristian!
Извините, арабского, румынского, грецкого и т.д. букв не знаю, потому привожу как создать файл, записать в него строку по-русски через буффер widestring.

Если хотите убедиться в работоспособности метода, откройте файл в каком-нибудь блокноте, понимающим Юникод.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Практикант)
Отправлен: 15.09.2005, 19:20


Вопрос № 26.301
Здравствуйте эксперты. Известно одно из полей записи(record).
Как прочесть из файла только те записи, которые содержат это поле?
Отправлен: 13.09.2005, 21:44
Вопрос задал: Teapot (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, Teapot!
Не совсем понятен вопрос.
По порядку:
Файл - если имеется ввиду файл БД (например, файл БД Paradox) тогда посредством компонентов доступа к данным необходимо установить подключение к нему или напрямую указав в свойстве DatabaseName компонента TQuery 'C:file.db'
а в свойстве SQL вписать: SELECT * FROM TABLE1 WHERE FIELD1=ИЗВЕСТНОЕ_ЗНАЧЕНИЕ
Запрос вернет все поля записей, в которых значение поля FIELD1=ИЗВЕСТНОЕ_ЗНАЧЕНИЕ (если ИЗВЕСТНОЕ_ЗНАЧЕНИЕ имеет строковый тип, то его нужно выделять апострофом с двух сторон 'ИЗВЕСТНОЕ_ЗНАЧЕНИЕ'). Если необходимо частичное совпадение можно использовать следующий запрос:
SELECT * FROM TABLE1 WHERE FIELD1 LIKE '%ИЗВЕСТНОЕ_ЗНАЧЕНИЕ%' где %- знак подстановки строки любой длины и содержания (или SELECT * FROM TABLE1 WHERE FIELD1 LIKE 'ИЗВ%').
Удачи.
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 14.09.2005, 00:41

Отвечает: sir henry
Здравствуйте, Teapot!
1. Считываете всю Record в соответствующую переменную;
2. Проверяете вхождение шаблона в соответствующем поле (если поле строковое, то с помощью функции Pos());
3. Если совпадение есть, то выводить туда, куда Вам нужно, если нет, то нет;
4. См. пункт1. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 14.09.2005, 07:12

Отвечает: Jadd
Здравствуйте, Teapot!
Вот так. Смотри в приложении.
Удачи. Пиши, если возникнут вопросы.

Приложение:

---------
Если в сердце дверь закрыта, нужно в печень постучаться

Ответ отправил: Jadd (статус: Практикант)
Отправлен: 14.09.2005, 10:16

Отвечает: mvp
Здравствуйте, Teapot!
Никак вы не прочтёте. Т. к. вы указали слово record, то я так понимаю к БД отношения никакого нет. Пример
type a1 = record x, y : integer;
a2 = record z, d : integer;
Как в ваших терминах - это одинаковые записи или нет?
Когда пишем в файл:
writeFile(fileId, a1),
то в файл не сохраняется информация о полях, а они просто последовательно записываются. И хоть тип a1 отличается от a2 названиями полей, но если a1.x = 2, a1.y = 3, a2.z=2, a2.d = 3, то в файле они будут храниться абсолютно одинаково. Читать с файла нужно структуру, но, судя по всему, вам известно только одно поле структуры, а не вся структура, что опять не позволит вам ничего определить. Например, читаем один символ с файла (Символ "A"):
если читали char или стринг, то получим "A",
если integer или byte, то получим 65,
т. е. обычное приведение типов.
Даже ещё не понятно, зачем в одном файле хранить записи различных типов. Пока организуешь работу с дополнительной информацией в файле, чтобы знать где какая запись, проще сразу разнести по разным файлам работу с записями разных типов.

---------
Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: 4-ый класс)
Отправлен: 14.09.2005, 16:52
Оценка за ответ: 5


Вопрос № 26.302
Здавствуйте Експерты!!
У меня вопрос к Вам.
Как сделать, чтобы после нажатии на кнопку Button1 появлялся Hint под
стрелкой мыши (мышей в это время можна двигать в любые стороны) и Hint держался до тех пор, пока не будет нажата кнопка мышки над другим компонентом на этой форме.
Отправлен: 13.09.2005, 22:14
Вопрос задал: Warrior (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Werewolf
Здравствуйте, Warrior!
unit Unit1;

interface

uses
Controls, Forms, StdCtrls, Classes, windows;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ActivateHint( x,y: Integer);
end;

var
Form1: TForm1;
hintWnd: THintWindow;
hinttxt:string='';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var r:trect;
begin
if hintWnd<>nil then
hintWnd.ReleaseHandle;
hintWnd:=THintWindow.Create(Form1);
hinttxt:='Это всплывающая подсказка';
ActivateHint(Mouse.CursorPos.X,Mouse.CursorPos.y);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if hintWnd<>nil then
hintWnd.ReleaseHandle;
end;

procedure TForm1.ActivateHint( x,y: Integer);
var
rect: TRect;
begin
if hintTxt <> '' then
begin
rect := hintWnd.CalcHintRect( Screen.Width, hinttxt, nil);
rect.Left := rect.Left + x;
rect.Right := rect.Right + x;
rect.Top := rect.Top + y;
rect.Bottom := rect.Bottom + y;
hintWnd.ActivateHint( rect, hinttxt);
end;
end;

end.
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 14.09.2005, 00:24
Оценка за ответ: 4
Комментарий оценки:
Немного не то...В этом случае Hint держится на кнопке. Мне нужно, чтобы он приклеися к указателю мышки и держался там при движении. И исчез по нажатию на другую кнопку.

Отвечает: sir henry
Здравствуйте, Warrior!
В этом случае, лучше будет использовать не Hint, а строку статуса. Т.к. Hint будет загораживать другие важные детали формы.
Нужно бросить StatusPanel на форму, поставить:
StatusBar1.SimplePanei:=True;
Для компонентов на форме, в событии OnEnter, написать:
StatusBar1.SimpleText:='Нужный Вам текст';
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 14.09.2005, 07:20

Отвечает: Rusland
Здравствуйте, Warrior!
Как вариант - создаете форму с Label для хинта (назовем ее Form2). AutoSize e нее делаем True, BorderStyle - bsNone, FormStyle можно сделать StayOnTop. Меняя текст Label - получаем свой хинт. Далее смотри ниже приведенный код. Удачи.

Приложение:

---------
Тише едешь, дальше будешь... от того места куда едешь

Ответ отправил: Rusland (статус: Студент)
Отправлен: 14.09.2005, 09:27

Отвечает: Татьяна
Здравствуйте, Warrior!
Самое простое повесить hint не на кнопку, а на форму и по нажатию на кнопку просто установить свойство формы showhint := true; Правда остается проблема, что хинт не движется вместе с мышью, а работает как обычная подсказка в виндах (с задержкой), так что может и вправду подумать заменить хинт на другой объект
---------
Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 2-ой класс)
Отправлен: 14.09.2005, 20:22


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное