Вопрос № 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. А приведённый вами код, похоже, к самому вопросу отношения и не имеет :-)
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: Ерёмин Андрей
Здравствуйте, Устинов В В!
В общем случае установка курсора делается так: Memo1.CaretPos:=Point(0,5);
Memo1.SetFocus;
0, 5 - координаты символа для вставки по горизонтали и вертикали. Не забудьте, что строки нумеруются с нуля.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Вот код: 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;
// Выдает - ассинхронная ошибка.
Вы работаете в ассинхронном режиме. Следует использовать соответсвующие события.}
Мой вопрос: что означает "ассинхронный режим". Какие события надо использовать.
Асинхронный режим означает, что события происходят асинхронно, т.е. не следует ожидать что после исполнения строки кода с 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 как сделать чтоб можна было отсортировать часто встречаемые буквы и показать на графику зависимость встречаемых букв в шифрованом тексте и встречаемых букв в дешифрованом тексте? Заранее спасибо
Отвечает: 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-я количество в шифрованом тексте
Отвечает: Ерёмин Андрей
Здравствуйте, Коваленко Дмитро Олександрович!
Есть довольно простой и быстрый способ. Заводим массив чисел на 255 элементов (т.к. всего символов в кодовой таблице 255). Далее берём текст и пробегаем по каждому символу с помощью цикла. "На лету" узнаём код текущего символа и увеличиваем соответствующий элемент массива на 1. В результате получаем массив с кол-вом вхождений каждого символа. Дальше остаётся только отсеить элементы с нулевым значением. В приложении реализация (текст берётся из Memo, а результаты выводятся в StringGrid). Для второй
строки (зашифрованный текст) нужно сделать по аналогии.
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: 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