Вопрос № 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, 15:25
Вопрос задал: Иваницкий (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Олекса aka SoW
Здравствуйте, уважаемый Иваницкий!
Это очень просто. Нужно воспользоваться компонентом THotKey из палитры Win32. Например, создать диалоговое окно, на которое
поставить кнопку и THotKey. Дальше поданный пример, как задать горячие клавиши для второго пункта первого меню:
Ответ отправил: Олекса 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
Отвечает: Олекса 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, а рисовать на нём:
голобальная переменная
Отвечает: 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
Здравствуйте, Эксперты!!!
У меня такой вопрос:
Работаю с файлами и не могу разобраться со следующим:
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) определяет верно, даже после внесения туда имени исходя из динамического
массива.
Отвечает: 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 Комментарий
оценки: Отлично! Спасибо! Это кстати!:)