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

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


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

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

Выпуск № 831
от 05.06.2007, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 467, Экспертов: 79
В номере:Вопросов: 5, Ответов: 8


Вопрос № 89330: Здравствуйте уважаемые Эксперты!В моём проекте я делаю многострочную таблицу с помощью следующего кода: procedure TForm1.StringGrid3DrawCell(Sender:TObject; Col,Row:Longint; Rect:TRect; State:TGridDrawState); var Line1,Line2: string...
Вопрос № 89332: Помогите пожалуйста!!! Как в поле Memo установить курсор в указанную строку? ...
Вопрос № 89355: Здравйствуйте. в delphiworld есть статья "Асинхронная ошибка ". Цитирую: {Вопрос: Почему не работает следующий код? begin ClietnSocket1.Open; if ClietnSocket1.Socket.Connected then ClietnSocket1.Socket.Send...
Вопрос № 89356: я написал прогу шифрование/дешифрование текста на Delphi как сделать чтоб можна было отсортировать часто встречаемые буквы и показать на графику зависимость встречаемых букв в шифрованом тексте и встречаемых букв в дешифрованом тексте? Заранее спасиб...
Вопрос № 89469: у меня есть прога по шифрованию текста мне надо сделать таблицу которая показует зависимость встречаэмых букв в исходном тексте и в шыфрованом!сколько например буква "а" встречается в исходном тексте а сколько в шифрованом она встречается и...

Вопрос № 89.330
Здравствуйте уважаемые Эксперты!В моём проекте я делаю многострочную таблицу с помощью следующего кода:

procedure TForm1.StringGrid3DrawCell(Sender:TObject; Col,Row:Longint;
Rect:TRect; State:TGridDrawState);
var Line1,Line2: string;
ptr: integer;
hGrid: TStringGrid;
newRect:TRect;//временный объект,нужный для отрисовки текста в определенной области
begin
hGrid := (Sender as TStringGrid);
ptr := Pos(',',hGrid.Cells[Col,Row]);
if ptr > 0 then
begin
Line1:=Copy(hGrid.Cells[Col,Row],1,ptr);
Line2:=Copy(hGrid.Cells[Col,Row],ptr+1,Length(hGrid.Cells[Col,Row])-ptr);
end
else
Line1 := hGrid.Cells[Col,Row];
hGrid.Canvas.FillRect(Rect);
hGrid.Canvas.Font.Style:=[fsBold];//задаём стиль шрифта - жирный
newRect.Left:= Rect.Left;
newRect.Top:= Rect.Top + 2;
newRect.Right:= Rect.Right;
newRect.Bottom:= Rect.Bottom;
DrawText(hGrid.Canvas.Handle,PChar(Line1),Length(Line1),newRect,DT_CENTER);
if ptr > 0 then
begin
newRect.Top:= Rect.Top - hGrid.Canvas.Font.Height + 2;
DrawText(hGrid.Canvas.Handle,PChar(Line2),Length(Line2),newRect,DT_CENTER);
end;
end;

,а вот с сохранением в файл в читабельном виде у меня проблема.Мне необходимо иметь в файле и заголовки столбцов и их содержимое и чтобы каждый заголовок соответствовал своему столбцу, а не был сдвинут. Помогите пожалуйста!!!
Отправлен: 30.05.2007, 21:07
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, GAZOT!
Воспользуйтесь простой функцией, которая в приложении. Она добавляет в строку пробелы, пока строка не станет длины NewLength. При записи в файл текст каждой ячейки "пропускайте" через эту функцию и тогда при просмотре файла моноширинным шрифтом всё будет ровно. Пример: AddSpacesToStr("Text",7) добавит 3 пробела в конце.
P.S. А приведённый вами код, похоже, к самому вопросу отношения и не имеет :-)

Приложение:

---------
Нет правила без исключений. Правило без исключений - исключение из правил.

Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 30.05.2007, 21:27


Вопрос № 89.332
Помогите пожалуйста!!!
Как в поле Memo установить курсор в указанную строку?
Отправлен: 30.05.2007, 21:16
Вопрос задал: Устинов В В (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Устинов В В!
В общем случае установка курсора делается так:
Memo1.CaretPos:=Point(0,5);
Memo1.SetFocus;

0, 5 - координаты символа для вставки по горизонтали и вертикали. Не забудьте, что строки нумеруются с нуля.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 30.05.2007, 21:37
Оценка за ответ: 5

Отвечает: Gh0stik
Здравствуйте, Устинов В В!

Вот код:
procedure TForm1.Button1Click(Sender: TObject);
var numLine:integer;
begin
numLine:=3; {номер строки в которую необходимо поставить курсор}
with Memo1 do
begin
selstart:=perform(EM_LineIndex,numLine-1,0); {расчет позиции}
perform(EM_ScrollCaret,0,0); {устанавливаем курсор}
SetFocus; {делаем объект активным}
end;
end;


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 30.05.2007, 21:45
Оценка за ответ: 5


Вопрос № 89.355
Здравйствуйте.
в delphiworld есть статья "Асинхронная ошибка ". Цитирую:
{Вопрос: Почему не работает следующий код?

begin
ClietnSocket1.Open;
if ClietnSocket1.Socket.Connected then
ClietnSocket1.Socket.SendText('Hello');
{..}
end;
// Выдает - ассинхронная ошибка.

Вы работаете в ассинхронном режиме. Следует использовать соответсвующие события.}

Мой вопрос: что означает "ассинхронный режим". Какие события надо использовать.
Отправлен: 30.05.2007, 22:53
Вопрос задал: Ренат Байрамгулов (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PGM
Здравствуйте, Ренат Байрамгулов!

Асинхронный режим означает, что события происходят асинхронно, т.е. не следует ожидать что после исполнения строки кода с Open, вы сразу же можете работать с сокетом, и следует дождаться ответа сокета. Используется это для того, чтобы не блокировать работу приложения на время работы сокета. Если это не нужно, стоит использовать блокирующие сокеты - это получится "синхронный" режим.

В приведенном вами примере есть два пути:

1. поставить цикл ожидания

FErrorAppeared := False; { Устанавливать в True в событии сокета OnError}
while not ClientSocket1.Active and not FErrorAppeared do Application.ProcessMessages;
if not FErrorAppeared then ClientSocket1.Socket.SendText('Hello');

2. посылать сообщение "Hello" в событии сокета OnConnect (это событие как раз и будет вызвано асинхронно)

procedure TClntForm.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
Socket.SendText('Hello');
end;
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 31.05.2007, 10:46


Вопрос № 89.356
я написал прогу шифрование/дешифрование текста на Delphi как сделать чтоб можна было отсортировать часто встречаемые буквы и показать на графику зависимость встречаемых букв в шифрованом тексте и встречаемых букв в дешифрованом тексте? Заранее спасибо
Отправлен: 30.05.2007, 23:04
Вопрос задал: Коваленко Дмитро Олександрович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gh0stik
Здравствуйте, Коваленко Дмитро Олександрович!

Рекомендую Вам просто взять и посчитать количество повторов каждого символа в тексте, а затем просто эти данные использовать для построения графика, например при помощи объекта TChart.

Вот процедура которая подсчитывает количество вхождений каждого символа в текст, который загружен в объект Memo. И далее по полученным данным строится график.

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
c:char;
a:array [#0..#255] of integer;
begin
for c:=#0 to #255 do a[c]:=0;
{считаем сколько раз используется символ}
for i:=0 to Memo1.Lines.Count-1 do
for j:=1 to length(Memo1.Lines[i]) do
a[Memo1.Lines[i][j]]:=a[Memo1.Lines[i][j]]+1;

Series1.Clear; {строим график по точкам}
for c:=#0 to #255 do
Series1.AddXY(ord(c),a[c]);
end;


В прикрепленном файле смотрите приложение, которое рисует два графика на одном рабочем поле в зависимости от файлов которые загружались в Memo1.

Good Luck!!!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 31.05.2007, 00:16
Оценка за ответ: 5

Отвечает: Примак Руслан Николаевич
Здравствуйте, Коваленко Дмитро Олександрович!

Повторение вопроса № 89081 - смотрите ответы.
Ответ отправил: Примак Руслан Николаевич (статус: 2-ой класс)
Ответ отправлен: 31.05.2007, 11:40
Оценка за ответ: 5


Вопрос № 89.469
у меня есть прога по шифрованию текста мне надо сделать таблицу которая показует зависимость встречаэмых букв в исходном тексте и в шыфрованом!сколько например буква "а" встречается в исходном тексте а сколько в шифрованом она встречается и показать ето на таблице! !Таблица должна состоять из 3 строк:

1-я русские буквы потом теже самые только большые и все цифры от 0 до 9 и символы:!@#$%^&*()_+=/.,";
2-я количество в исходном тексте
3-я количество в шифрованом тексте
Отправлен: 31.05.2007, 18:06
Вопрос задал: Коваленко Дмитро Олександрович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Коваленко Дмитро Олександрович!
Есть довольно простой и быстрый способ. Заводим массив чисел на 255 элементов (т.к. всего символов в кодовой таблице 255). Далее берём текст и пробегаем по каждому символу с помощью цикла. "На лету" узнаём код текущего символа и увеличиваем соответствующий элемент массива на 1. В результате получаем массив с кол-вом вхождений каждого символа. Дальше остаётся только отсеить элементы с нулевым значением. В приложении реализация (текст берётся из Memo, а результаты выводятся в StringGrid). Для второй строки (зашифрованный текст) нужно сделать по аналогии.

Приложение:

---------
Нет правила без исключений. Правило без исключений - исключение из правил.

Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 31.05.2007, 18:27
Оценка за ответ: 5

Отвечает: Gh0stik
Здравствуйте, Коваленко Дмитро Олександрович!

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

Я Вам просто рекомендую описать множество, в котором будут содержаться все "нужные символы". И далее просто пробегаем по всему тексту и проверяем является ли символ элементом множества и если да, то увеличиваем счетчик количества на 1.

Вот описание множества, которое соответствует условию:
symb=['А'..'я','.',',','+','=','_',')','(','*','?',':','%',';','"','!','№',''''];

Процедуру подсчета символов я практически не менял, я просто проверял символы на соответсвие при выводе.
Вот так:
for c:=#0 to #255 do
if c in symb then
begin
StringGrid1.ColCount:=k+1;
StringGrid1.Cells[k,0]:=c;
StringGrid1.Cells[k,1]:=inttostr(a[c,1]);
StringGrid1.Cells[k,2]:=inttostr(a[c,2]);
inc(k);
end;


Полный код смотрите в прикрепленном файле.

Good Luck!!!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 31.05.2007, 18:48
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное