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

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


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

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

Выпуск № 666
от 30.11.2006, 23:05

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


Вопрос № 64072: УВАЖАЕМЫЕ, ЭКСПЕРТЫ подскажите как в Edit'е переместить курсор из положения перед первым символом в место за последним?...
Вопрос № 64108: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как программно добавить задание в планировщик задач Windows XP? Заранее благодарен!...
Вопрос № 64113: Здравствуйте, господа Эксперты! Помогите, пожалуйста, решить такую проблему: надо из типизированного файла прочитать по порядку все записи (я пользуюсь TFIleStream) и записать их в текстовый файл - для просмотра, например, в Блокноте. Я понимаю, что ...
Вопрос № 64138: Здравствуйте уважаемые эксперты!Я только недавно занялся делфи.а мне поставили задачу написать программку для распаковке кодограмм,смысл её заключается в следующем из битового файла считывается блок в 28 байт идёт его обработка(заполнение некой с трук...
Вопрос № 64151: Здраствуйте уважаемые эксперты. Возник такой вопрос, программа должна генерить порядковые числа и писать в файл. Сделал, все работает отлично, но пишет в файл 1,2,3,4...и т.д. Как сделать чтобы она писала с нулями, то есть: 007,008,009,010,011... ...
Вопрос № 64178: Здравствуйте уважаемые эксперты... У меня вот какой вопрос: Как рисовать в Delphi.. просто по форме, но не используя свойство canvas. А то канва очень медленно работает. Может кто подскажет более быстрый способ рисования (только пожалуйсто ес...

Вопрос № 64.072
УВАЖАЕМЫЕ, ЭКСПЕРТЫ подскажите как в Edit'е переместить курсор из положения перед первым символом в место за последним?
Отправлен: 24.11.2006, 23:01
Вопрос задал: MIXAIL (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Синельников Сергей
Здравствуйте, MIXAIL!

Edit1.SetFocus;
Edit1.SelStart:=Edit1.SelLength;
Ответ отправил: Синельников Сергей (статус: 1-ый класс)
Ответ отправлен: 25.11.2006, 12:40
Оценка за ответ: 4
Комментарий оценки:
По вашему у меня не получилось. Сделал как посоветовал Mexes

Отвечает: Mexes
Здравствуйте, MIXAIL!
Скорее так:

Edit1.SetFocus;
Edit1.SelStart:=Length(Edit1.Text);
Edit1.SelLength:=0;
Ответ отправил: Mexes (статус: 5-ый класс)
Ответ отправлен: 25.11.2006, 13:53
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!! Всё получилось!!!


Вопрос № 64.108
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как программно добавить задание в планировщик задач Windows XP? Заранее благодарен!
Отправлен: 25.11.2006, 08:30
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Андрющенко Вячеслав Васильевич!
Планировщик работает на уровне системы и она никому просто так не дает его использовать. К тому же, система обычно этим сама занимается...
Наверное, вы имели ввиду программу Task Scheduler, которая делает что-дь по расписанию. Мне кажется, что наиболее "прозранчным" методом будет использование консоли, которую этот самый планировщик поддерживает.
Вначале читаете, как его использовать:
Пуск->выполнить->cmd->help at
либо
[Win]+[R]->cmd->at /?
Там все очень просто.
А далее в своей программе делаете вызов: ShellExecute

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 25.11.2006, 19:30


Вопрос № 64.113
Здравствуйте, господа Эксперты! Помогите, пожалуйста, решить такую проблему: надо из типизированного файла прочитать по порядку все записи (я пользуюсь TFIleStream) и записать их в текстовый файл - для просмотра, например, в Блокноте. Я понимаю, что это надо делать циклом, надо еще ПрогрессБар прикрутить, но как: я не знаю, сколько в типизированном файле будет записей. Как наиболее быстро их посчитать - возможно, не читая их одну за другой? Предложите, пожалуйста, возможный алгоритм такой перезаписи из файла в файл. Заранее спасибо!
Отправлен: 25.11.2006, 09:19
Вопрос задал: Neiroman (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: monah
Здравствуйте, Neiroman!
var
fl:tMyType; // тип записи в файле.
fs:Tfilestream;
i, e:integer;
begin
.....
ProgresBar1.max:=fs.size;
e:=fs.size div SizeOf(Tfilestream); // количество записей.
for i:=0 to e-1 do
begin
fs.read(fl, sizeof(fl));
/// записываем в текстовый файл данные
ProgressBar1.Progres:=fs.Position;
end;
progressBar1.Progres:=0;
fs.free;
end;
---------
festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 25.11.2006, 10:36

Отвечает: Sattar
Здравствуйте, Neiroman!
procedure TForm1.Button2Click(Sender: TObject);{Конвертує файл}

Приложение:

Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 25.11.2006, 15:16

Отвечает: Писарев, Павел, Юрьевич
Здравствуйте, Neiroman!
В приложение превожу пример работы с типизированным файлом.

Приложение:

Ответ отправил: Писарев, Павел, Юрьевич (статус: 1-ый класс)
Ответ отправлен: 25.11.2006, 17:23

Отвечает: PaVeL_Ekt
Здравствуйте, Neiroman!

Можно еще использовать структуру
var
Buf:array [1..1024] of byte;
rd: integer;
F:TFileStream;
...
REPEAT
rd:=F.ReadBuf(buf,sizeof(buf);

UNTIL rd<1;

---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 27.11.2006, 06:39


Вопрос № 64.138
Здравствуйте уважаемые эксперты!Я только недавно занялся делфи.а мне поставили задачу написать программку для распаковке кодограмм,смысл её заключается в следующем из битового файла считывается блок в 28 байт идёт его обработка(заполнение некой структуры) затем переход на следующий блок в 28 байт ит .д.Блоки по 28 байт разделений не имеют т.е следуют друг за другом.Подскажите как мне наилучшим образом организовать считывание блока для обработки и переход от блока к блоку пока не будет достигнут конец файла .Заранее спасибо.
Отправлен: 25.11.2006, 13:02
Вопрос задал: Delphi-n (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: monah
Здравствуйте, Delphi-n!
Воспользуйся потоком, TmemoryStream или TFileStream.
Создай переменную, нужной структуры.

Приложение:

---------
festina lente

Ответ отправил: monah (статус: Студент)
Ответ отправлен: 25.11.2006, 13:55

Отвечает: PaVeL_Ekt
Здравствуйте, Delphi-n!

Для считывания определенного кол-ва байт нужно делать примерно так

var
F:TFileStream(TMemoryStream);
Buf: array [1..28] of byte;
rd: integer;
...
F.LoadFromFile(FName);
...
дальше можно через repeat until или while (что больше подходит)

While F.readbuf(buf, sizeof(buf))<>0 do
begin
... //обработка кода
end;

или

Repeat
rd:=F.readbuf(buf,sizeof(buf));
...//обработка кода
unti rd<1;

УДАЧИ
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 27.11.2006, 06:49


Вопрос № 64.151
Здраствуйте уважаемые эксперты. Возник такой вопрос, программа должна генерить порядковые числа и писать в файл. Сделал, все работает отлично, но пишет в файл 1,2,3,4...и т.д. Как сделать чтобы она писала с нулями, то есть: 007,008,009,010,011...
Заранее благодарен.
Отправлен: 25.11.2006, 14:20
Вопрос задал: Алескандр (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: monah
Здравствуйте, Алескандр!
var
s:string;
i:integer;

for i:=0 to 12 do
begin
s:=inttostr(i)
while length(s)<3 do s:='0'+s;
showmessage(s);
end;
---------
festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 25.11.2006, 14:25

Отвечает: Coupler
Здравствуйте, Алескандр!
Можно использовать FormatFloat. Пример в приложении.

Приложение:

Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 25.11.2006, 15:03

Отвечает: DeVampir
Здравствуйте, Алескандр!
Попробуйте добавить к числу тысячу, потом перевести в строку, обрезать первый символ и только тогда вывести. Очень удобно, если неизвестно сколько нулей нужно впереди (т.е. можно возвести 10 в нужную степень, а потом добавить к выводимому числу)
Удачи!!!
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 3-ий класс)
Ответ отправлен: 25.11.2006, 16:48

Отвечает: Sattar
Здравствуйте, Алескандр!
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s:string;
begin
for i:=1 to 100 do
begin
case i of
10..99:s:='0'+IntToStr(i);
1..9:s:='00'+IntToStr(i);
else s:=IntToStr(i);
end;
Memo1.Lines.Add(S);
end;
end;
Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 25.11.2006, 18:12


Вопрос № 64.178
Здравствуйте уважаемые эксперты... У меня вот какой вопрос:
Как рисовать в Delphi.. просто по форме, но не используя свойство canvas.
А то канва очень медленно работает. Может кто подскажет более быстрый способ рисования (только пожалуйсто если можно без ASM, а то не то чтоб я с ним дружу.. =)... )
Отправлен: 25.11.2006, 18:31
Вопрос задал: Spiteful (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: sir henry
Здравствуйте, Spiteful!
Альтернативный способ - использовать функции рисования WinAPI. Для этого Вам нужно сначала получить контекст формы:
Var
DC:=HDC;
Begin
DC:=GetDC(Form1.Handle);
Rectangle(20, 20, 100, 100); //Прямоугольник
ReleaseDC(Form1.Handle, DC);
DeleteDC(DC);
End;
Только не забывайте после каждого акта рисования удалять контекст устройства чтобы освободить ресурсы системы.
Все функции рисования в WinAPI называются так-же, как и функции Canvas. Насколько это быстрее судить не берусь, но попробуйте, может Вас скорость удовлетворит.
Однако для быстрого и профессионального рисования обычно используют либо DirectX, либо OpenGL. Но объем кода при этом существенно больше.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 25.11.2006, 19:59
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое попробую разобраться с WinApi так как использовать DirectX и OpenGl нельзя по условию задачи =(


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное