Отправляет email-рассылки с помощью сервиса Sendsay
Пожалуйста, ответьте на вопрос нашей анкеты:
Кем Вы работаете?

  Все выпуски  

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


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

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

Выпуск № 511
от 23.06.2006, 12:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 365, Экспертов: 72
В номере:Вопросов: 6, Ответов: 11


Вопрос № 46494: Здравствуйте эксперты! Подскажите как можно преобразовать dbf-файлы (которые создаются программой 1С в определенной папке) в формат Excel? (Программистка 1С не знает как сразу создавать файлы в Excel'e или издевается :))))) ) Заранее спас...
Вопрос № 46501: что надо сделать, чтобы работа программы ограничивалась тремя минутами, и по истечению этого времени вышло сообщение (MessageBox) и при нажатии ОК программа выключалась, потом приповторном включении программы за один сеанс работы windows программа вы...
Вопрос № 46503: Здравствуйте. Подскажите пожалуйста как сделать так чтобы пользователь самостоятельно мог выбрать кнопки для короткого доступа к меню. Спасибо) ...
Вопрос № 46513: что сделать чтобы программа была защищена паролем, т.е. в настройках вводим пароль и чтоб при последующих запусках программа запрашивала именно этот пароль?...
Вопрос № 46546: Здравствуйте уважаемые эксперты. Сделал бегущую строку в таймере if Label1.Caption <> '' then begin while Label1.Left <= -(Label1.Width) do Label1.Left := Panel1.Width; if Label1.Caption <> '' then Label1.Lef...
Вопрос № 46561: Здравствуйте, Эксперты!!! У меня такой вопрос: Работаю с файлами и не могу разобраться со следующим: Описываем типы: type VersionBase=record {ИТОГО: 5 байт} N1,N2,N3: Byte; {3 байта} N4: Word; {2 байта}<b...

Вопрос № 46.494
Здравствуйте эксперты!
Подскажите как можно преобразовать dbf-файлы (которые создаются программой 1С в определенной папке) в формат Excel?
(Программистка 1С не знает как сразу создавать файлы в Excel'e или издевается :))))) )
Заранее спасибо.
Отправлен: 17.06.2006, 13:12
Вопрос задал: Юpий (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Loki®
Здравствуйте, Юpий!
Проще всего - настроить винду так, чтобы dbf файлы открывались сразу в Exel-е, и не надо ничего никуда конвертировать...
P.S.: А женщин, которые "могут и забыть" - уволить нафиг, и взять тех, которые не забывают о том, что сохранили, а что нет (шутка). А вообще - Бухгалтерия - вещь серьёзная...
Ответ отправил: Loki® (статус: 2-ой класс)
Ответ отправлен: 18.06.2006, 15:45
Оценка за ответ: 1


Вопрос № 46.501
что надо сделать, чтобы работа программы ограничивалась тремя минутами, и по истечению этого времени вышло сообщение (MessageBox) и при нажатии ОК программа выключалась, потом приповторном включении программы за один сеанс работы windows программа выключалась, а после перезагрузки компьютера снова включилась и после трех минут снова выключилась, и потом все так-же?
Отправлен: 17.06.2006, 13:47
Вопрос задал: Ghora (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Ghora!

Проще всего это сделать с помощью таймера.
Ставите на форму компонент TTimer со вкладки System, интервал делаете равным 180000 - (1000 это одна секунда).
На процедуру OnTimer пишешь:
Showmessage('Купи меня для полноценной работы :)');
Close;

Для того чтобы эта программа запускалась один раз за сессию в обработчик формы OnCreate пишете:

procedure TForm1.FormCreate(Sender: TObject);
begin
if GlobalFindAtom('THIS_IS_SOME_OBSCUREE_TEXT') = 0 then
GlobalAddAtom('THIS_IS_SOME_OBSCUREE_TEXT')
else Halt;
end;

Удачи!
---------
Ответы на все вопросы - на сайте www.ya.ru
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 17.06.2006, 13:54


Вопрос № 46.503
Здравствуйте. Подскажите пожалуйста как сделать так чтобы пользователь самостоятельно мог выбрать кнопки для короткого доступа к меню. Спасибо)
Отправлен: 17.06.2006, 15:25
Вопрос задал: Иваницкий (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Олекса aka SoW
Здравствуйте, уважаемый Иваницкий!
Это очень просто. Нужно воспользоваться компонентом THotKey из палитры Win32. Например, создать диалоговое окно, на которое поставить кнопку и THotKey. Дальше поданный пример, как задать горячие клавиши для второго пункта первого меню:

MainMenu1.Items[0].Items[1].ShortCut:=HotKey1.HotKey;

Удачи!
---------
Вік живи - вік учись.
Ответ отправил: Олекса aka SoW (статус: 2-ой класс)
Ответ отправлен: 17.06.2006, 15:40
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо)

Отвечает: Serg_6667
Здравствуйте, Иваницкий!

Вохможно, это поможет. Есть полезная функция TextToShortCut. В приложении пример
Exit1 - один из пунктов меню.

Приложение:

Ответ отправил: Serg_6667 (статус: 3-ий класс)
Ответ отправлен: 19.06.2006, 13:12
Оценка за ответ: 5


Вопрос № 46.513
что сделать чтобы программа была защищена паролем, т.е. в настройках вводим пароль и чтоб при последующих запусках программа запрашивала именно этот пароль?
Отправлен: 17.06.2006, 17:14
Вопрос задал: Ghora (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Ghora!
Очевидно, сохранять где-дь пароль. В зашифрованном виде, конечно.
Можно в соседнем файле, можно вообще в реестре.
По поводу шифровки поищите в инете по словам "реализация MD5".
А по поводу реестра - "TRegistry Open HKEY_LOCAL_MACHINE" или что-дь в этом духе - я сейчас сразу не вспомню, как с реестром работать. И заодно посмотрите help по теме TRegistry
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 17.06.2006, 18:00

Отвечает: Олекса aka SoW
Здравствуйте, Ghora!
В дополнении я написал код, который выполняет нужные вам действия. Там на форме находится кнопка, когда на нее нажимаем - выводится окно для введения пароля. Он будет записан в реестр - HKEY_CURRENT_USERSoftwareYour prog nameSettings в ключ с названием Password.
При создании формы тоже выводится окно введения пароля. Потом идет проверка - если пользователь ввел правильный пароль, или ключ в реестре отсутствует (программа запускается впервые) то программа запускается. Иначе выводится сообщение о неправильном пароле и программа закрывается.

Недостатком является то, что пароль будет незащищенный и через реестр его может каждый посмотреть. Выход - закодировать пароль, и хранить его в каком-то другом разделе реестра.

Код я писал сам, то есть все работает правильно. Если возникнут какие-то вопросы - обращайтесь.

Приложение:

---------
Вік живи - вік учись.

Ответ отправил: Олекса aka SoW (статус: 2-ой класс)
Ответ отправлен: 17.06.2006, 18:07


Вопрос № 46.546
Здравствуйте уважаемые эксперты.
Сделал бегущую строку в таймере
if Label1.Caption <> '' then begin
while Label1.Left <= -(Label1.Width) do
Label1.Left := Panel1.Width;
if Label1.Caption <> '' then
Label1.Left := Label1.Left - 2;
Но когда Label движется текст моргает
Помогите мне пожалуйста.
Заранее благодарен.
Отправлен: 17.06.2006, 23:36
Вопрос задал: Venom56r (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Полховский Александр Владимирович
Здравствуйте, Venom56r!
Попробуйте не перемещать label, а рисовать на нём:
голобальная переменная

var
L1:integer;

в обработчике таймера:

if L1 <= -(Panel1.Width)
then L1 := Panel1.Width;
L1 := L1 - 2;
label1.Canvas.Brush.Color:=clbtnface;
label1.Canvas.FloodFill(0, 0, clwhite, fsborder);
label1.Canvas.TextOut(l1, 3, 'fgdsafdsafdsafdsafdsajghhghdkuyt');

Label растяните на длину панельки.
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 18.06.2006, 03:29
Оценка за ответ: 3

Отвечает: DeVampir
Здравствуйте, Venom56r!
поставьте на форму компонент ApplicationEvents с вкладки Additional и в его событии onIdle запишите то, что у вас в таймере. (Таймер можно удалить) Задержку можно выставлять процедурой Sleep (procedure Sleep(milliseconds: Cardinal);), дописав ее в конец onIdle
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 2-ой класс)
Ответ отправлен: 19.06.2006, 04:03
Оценка за ответ: 5

Отвечает: Gh0stik
Здравствуйте, Venom56r!

Вот предлагаю такое решение Вашей проблемы.
Установите значение свойства Align в alTop либо alBottom в зависимовти от положениявашей бегущей строки.
Значению Caption присваеваем Вашу строку, только с одним НО в конец строки советую Вам добавить хотябы 40 пробелов (для красоты - подбирается экспериментальным путем), можно описать в обработчике FormCreate таким образом:

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:=Label1.Caption+StringOfChar(' ',40);
end;


Далее для работы самой бегущей строки в обработчике компонента Timer:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
{движение текста с права на лево}
Label1.Caption:=copy(Label1.Caption,2,length(Label1.Caption)-1)+copy(Label1.Caption,1,1);
{движение текста слева на право}
// Label1.Caption:=copy(Label1.Caption,length(Label1.Caption),1)+copy(Label1.Caption,1,length(Label1.Caption)-1);
end;


Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 19.06.2006, 11:16
Оценка за ответ: 4


Вопрос № 46.561
Здравствуйте, Эксперты!!!

У меня такой вопрос:
Работаю с файлами и не могу разобраться со следующим:

Описываем типы:

type
VersionBase=record {ИТОГО: 5 байт}
N1,N2,N3: Byte; {3 байта}
N4: Word; {2 байта}
end;

IshodnyeDanye=record {ИТОГО: 20 байт}
Descriptor: String[12]; {13 байт}
Version: VersionBase; {5 байт}
MaxGameEng: Word; {2 байта}
end;

GameInfo=record {ИТОГО: NNN+6 байт}
SmechenieGame: LongInt; {4 байта}
ObnovlenieGame: Word; {2 байта}
Name: String; {NNN байт}
end;

Далее описываем переменные:

var
f: File;
TIshodnyeDanye: IshodnyeDanye;
TGameInfo: array of GameInfo;

Теперь самое интересное:

... процедура по сохранению в файл...
...
следующая строчка записывает в файл всё как положено
FileWrite(HandleF, TIshodnyeDanye, 20);

, а вот эта строчка записывает всякую ерунду и притом значение получаемое при вызове функции SizeOf(TGameInfo[0]), всегда равно 12.
FileWrite(HandleF, TGameInfo[0], SizeOf(TGameInfo[0]));

Что нужно сделать, чтобы избежать записи в файл такой ерунды? Почему так происходит? Может быть есть другая функция, которая точно определит размер записи (в байтах)? В чём собственно причина?

P.S. Интересно то, что SizeOf(TGameInfo[0].Name) определяет верно, даже после внесения туда имени исходя из динамического массива.
Отправлен: 18.06.2006, 09:56
Вопрос задал: Подболотов Иван Алексеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: sir henry
Здравствуйте, Подболотов Иван Алексеевич!
1. Вообщето буква "Т" перед именем переменной обозначает "Type", т.е. должна она стоять там, где Вы типы объявляете, а не сами переменные. В Вашнм же случае эта буква Т выглядит совершенно нелогично.
2. Зачем усложнять с определением размера компонента? Люая из ячеек массива будет иметь размер того типа данных, который Вы назначили массиву. В Вашем же случае массив объявлен как динамический и, следовательно, это не сам массив, а указатель на него, т.е. Вы получаете размер указателя (4 байта), а не размер ячейки массива.
Правильно будет так:
FileWrite(HandleF, TGameInfo[0], SizeOf(GameInfo));
Единственное только в типе GameInfo определите ТОЧНОЕ ЗНАЧЕНИЕ байт, которое у Вас занимает переменная STRING, т.к. в Дельфи STRING стал динамическим и тоже является указателем на строку, в отличие от классического Паскаля.
если же Вы не знаете заранее размера строки, то выведите ее из состава GameInfo и вычисляйте ее размер отдельно.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 18.06.2006, 10:57
Оценка за ответ: 5
Комментарий оценки:
С буквой "Т" это мой косяк - исправил.
По поводу 2 пункта, попробовал, то же самое. Интересен простой пример, в книге вычитал:

var FileHandle: Integer;
S: String;
begin
S:='текстовая строка';
FileHandle:=FileCreate('C:TMPS.TXT');
FileWrite(FileHandle,S, SizeOf(S));
FileClose(FileHandle);
end;

По идее, в файле должна появиться строка "текстовый файл", но у меня появляется 4 байта, похожие на адрес по которому располагается строка в памяти.
Может быть у меня что с Delphi 7. На него поставлен SP1. Надо попробовать на 2005. Странные аномалии просто.

Отвечает: Маренич Владимир
Здравствуйте, Подболотов Иван Алексеевич!
Добавлю к ответу sir_henry следующее:
1. фактический размер записи (record) округляется до 1,2,4,8 байтов в зависимости от опций компиляции (меню ProjectsOptions... закладка "Compiler" -> record field alignment). Чтобы размер записи соответствовал Вашим подсчетам выбирите соотв. 1 байт или используйте объявление "packed record" вместо "record".

2. Динамическую строку (string) можно записать, например, так (исправленный Ваш пример):
var FileHandle: Integer;
S: String;
begin
S:='текстовая строка';
FileHandle:=FileCreate('C:TMPS.TXT');
//пишем с первого символа и соотв. длину строки
//не забудьте, что длина строки может быть нулевой
//и Вы получите в таком случае исключение
FileWrite(FileHandle,S[1], Length(S));
FileClose(FileHandle);
end;

В приложении пара функций, которые пишут и читают строки в/из потока
Думаю Вам не составит труда переделать их для файлов. Желаю удачи.

Приложение:

Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 19.06.2006, 01:43
Оценка за ответ: 5
Комментарий оценки:
Отлично! Спасибо! Это кстати!:)


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное