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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 969
от 04.11.2007, 14:35

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


Вопрос № 106705: Уважаемые эксперты, я решил задачу. Но для n не могу создать динамический массив. Как в Delphi надо создать динамический массив. Помогите решит задачу. http://ifolder.ru/3869643...
Вопрос № 106739: Здравствуйте, уважаемые эксперты! Мне необходимо реализовать следующие функции: - удалять пробел в начале вводимой строки в едите (полагаю так: если первый символ=пробел, тогда ничего не писать) - удалять пробел в конце вводимой строки (о...
Вопрос № 106931: Уважаемые эксперты! Подскажите, куда "копать" Задача: необходимо организовать связь через TCP/IP по принципу Client-Server, примерно как SMTP сервер: клиент посылает команды серверу, сервер обрабатывает команды, обменивается данными с б...
Вопрос № 107084: Доброго времени суток, уважаемые эксперты Подскажите, пожалуйста, как сделать, чтобы при наведении курсора на ячейку DBGrid появлялась подсказка (Hint) с текстом значения ячейки, расположенной под курсором (необходимо для отображения значени...
Вопрос № 107167: Здрасти всем. 1)Как сохранит текст в програме, а тоесть в edit написал чёто и закрыл прогу а потом включаеш а это чёто осталось. 2) как организовать скриншот экрана на сервере через UDP. 3)как узнать активное окно на сервере. Зарание большое спасибо!...
Вопрос № 107344: Здравствуйте! Скажите, пожалуйста, как можно сохранить размеры и расположение формы, чтобы после очередного запуска программы, они остались теми же....

Вопрос № 106.705
Уважаемые эксперты, я решил задачу. Но для n не могу создать динамический массив. Как в Delphi надо создать динамический массив. Помогите решит задачу.

http://ifolder.ru/3869643

Приложение:

Отправлен: 25.10.2007, 09:29
Вопрос задал: Muhammedov Abdurohman (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Drbear
Здравствуйте, Muhammedov Abdurohman!

Может это Вам поможет:
type
DAr = array of mld;
var
n: DAr;
или сразу
var n: array of mld;
Таким образом объявлена ссылка на область памяти. Для указания размер существует процедура SetLength, ее можно использовать в любых местах и определять размера массива тот, который необходим в данную минуту.
SetLength(n,7)
Создан массив состоящий из 7 элементов начиная с 0. Важно! Первый элемент в динамическом массиве всегда нулевой. Для определения верхний границы используется функция Hihg
i:=High(n);
i - верхняя граница.
Для определения длины Length(n).
Для определения нижней границы Low(a).
При нулевой длине массива High, возращает -1.
Ответ отправил: Drbear (статус: 3-ий класс)
Ответ отправлен: 25.10.2007, 09:45
Оценка за ответ: 4

Отвечает: Gladiator
Здравствуйте, Muhammedov Abdurohman!

Это делается следующим образом:

объявление одномерного массива
var
Massiv: array of integer;

Задание размерности одномерного массива
SetLength(Massiv, 10);

объявление многоомерного массива
var
Massiv: array of array of integer;

Задание размерности многомерного массива

SetLength(Massiv, 10);
for I := Low(Massiv) to High(Massiv) do
SetLength(A[I], 10);
Ответ отправил: Gladiator (статус: Студент)
Ответ отправлен: 25.10.2007, 09:46
Оценка за ответ: 5
Комментарий оценки:
А как мне исправить свою ошибку в программе?

Отвечает: Degtyarev Anton
Здравствуйте, Muhammedov Abdurohman!
Мне нравится несколько способов создания динамических массивов
1. просто при описании массива не указывать размер
var
a : array of integer
n : integer // длина массива
begin
n:=10;
SetLength(a,n); // установить длину динамического массива
...
end;

2. вариант можно обявить динамический массив и так

procedure TForm1.Button1Click(Sender: TObject);
type
pDynArray = ^tDynArray;
tDynArray = array[1..1000] of SomeType; // любой тип
var
DynArray: pDynArray;
I: Integer;
begin
{ Распределяем память }
GetMem(DynArray, SizeOf(SomeType) * SpinEdit1.Value);
{ Пишем данные в массив }
for I := 1 to SpinEdit1.Value do
DynArray^[I] := I;
{ Читаем данные из массива }
for I := SpinEdit1.Value downto 1 do
ListBox1.Items.Add('Элемент ' + IntToStr(DynArray^[I]));
{ Освобождаем память }
FreeMem(DynArray, SizeOf(SomeType) * SpinEdit1.Value);
end;
3. вариант
Определитесь с максимальным размером который может вам потребоваться создайте этот массив

const
MaxArraySize = (65520 div SizeOf(LongInt));
(* в 16-битной среде *)
type
MyArrayType = array[1..MaxArraySize] of LongInt;
var
P: ^MyArrayType;
const
ArraySizeIWant: Integer = 1500; // или описать получаемой переменной

begin
далее в процедуре или функции выделяем память
Будь внимательны при распределении размера, в точности необходимый для размещения нового массива. Если вы попытаетесь записать элемент, выходящий за допустимый диапазон, компилятор не ругнется, но объект исключения вам обеспечен.

P := AllocMem(ArraySizeIWant * SizeOf(Integer));
далее работать как с обычным масивом
{ Как присвоить значение пятому элементу массива. }
P^[5] := 68;

после не забудте освободить память

FreeMem(P, ArraySizeIWant * SizeOf(Integer));
end;


---------
Сколько волка не корми, а слон всё равно толще
Ответ отправил: Degtyarev Anton (статус: 2-ой класс)
Ответ отправлен: 25.10.2007, 10:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо, попробую понят


Вопрос № 106.739
Здравствуйте, уважаемые эксперты!
Мне необходимо реализовать следующие функции:
- удалять пробел в начале вводимой строки в едите (полагаю так: если первый символ=пробел, тогда ничего не писать)
- удалять пробел в конце вводимой строки (он екзит: если символ(длина строки-1)=пробел, тогда длина строки=длина-1).
Помогите написать подлому ламеру.

С уважением, Cerby.
Отправлен: 25.10.2007, 14:26
Вопрос задала: Cerby (статус: 1-ый класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Omickron
Здравствуйте, Cerby!

Рекомендую функцию Trim

Delphi syntax:

function Trim(const S: string): string; overload;

function Trim(const S: WideString): WideString; overload;
Trims leading and trailing spaces and control characters from a string.
Ответ отправил: Omickron (статус: 5-ый класс)
Ответ отправлен: 25.10.2007, 14:36
Оценка за ответ: 5
Комментарий оценки:
пасиба)

Отвечает: Vas177
Здравствуйте, Cerby!

Существует функция Trim(строка), которая удаляет лишние пробелы в начале и конце строки. Может она вам будет полезной.

Edit1.Text := Trim(Edit1.Text);
Ответ отправил: Vas177 (статус: 1-ый класс)
Ответ отправлен: 25.10.2007, 14:37
Оценка за ответ: 5

Отвечает: Drbear
Здравствуйте, Cerby!

попробуйте на событие выхода из TEdit поставить примерно такой код:
Edit.Text := trim(Edit.Text);

trim(строка) удаляет начальные и завершающие пробелы и вспомогательные символы
Ответ отправил: Drbear (статус: 3-ий класс)
Ответ отправлен: 25.10.2007, 14:37
Оценка за ответ: 5
Комментарий оценки:
Спасибо, буду знать.

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Cerby!

на мой взгляд проще будет при выходе из эдита обрезать все пробелы вокруг введенного значения:

ptocedure TFormXXX.EditExit(sender: TObject);
begin
Edit.Text := Trim(Edit.Text);
end;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 9-ый класс)
Ответ отправлен: 25.10.2007, 14:37
Оценка за ответ: 5

Отвечает: Coupler
Здравствуйте, Cerby!
Вот код, удаляющий пробелы в начале и конце строки:

var s:string;
begin
s:=edit1.Text;
if s[1]=' ' then
delete (s,1,1);
if s[length(s)]=' ' then
delete (s,length(s),1);
edit1.Text:=s;
Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 25.10.2007, 14:42
Оценка за ответ: 5
Комментарий оценки:
здорово, спасибо

Отвечает: Degtyarev Anton
Здравствуйте, Cerby!
Для того чтобы убрать управляющие или незначащие символы в конце и в начале строки используйте функцию trim
Для того чтобы убрать незначащие символы в начале строки trimLeft в конце trimRight
И ещё в форме обнулите текст в Edit

Приложение:

---------
Сколько волка не корми, а слон всё равно толще

Ответ отправил: Degtyarev Anton (статус: 2-ой класс)
Ответ отправлен: 25.10.2007, 15:16
Оценка за ответ: 5
Комментарий оценки:
спасибо, все по полочкам

Отвечает: Разживин Александр Валерьевич
Здравствуйте, Cerby!
Вот еще вариант:

var s: string;
begin
s := Edit1.Text;
while (Length(s)>0) and (s[1]=#32) do
Delete(s, 1, 1);
while (Length(s)>0) and (s[Length(s)]=#32) do
Delete(s, Length(s), 1);
Edit1.Text := s;
end;
Ответ отправил: Разживин Александр Валерьевич (статус: 1-ый класс)
Ответ отправлен: 25.10.2007, 21:45
Оценка за ответ: 5
Комментарий оценки:
Ну, почти то же самое, что в ответе у Coupler. Но за старания, спасибо.


Вопрос № 106.931
Уважаемые эксперты! Подскажите, куда "копать"
Задача: необходимо организовать связь через TCP/IP по принципу Client-Server, примерно как SMTP сервер: клиент посылает команды серверу, сервер обрабатывает команды, обменивается данными с базой данных, обрабатывает их и передает обработанные данные клиенту.
Версия Delphi 7. Хотелось бы найти литературу (желательно рускоянычную) и примеры по данному вопросу.
Отправлен: 26.10.2007, 21:51
Вопрос задал: Разживин Александр Валерьевич (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Виктор Пырлик
Здравствуйте, Разживин Александр Валерьевич!

В целом, организовать такую работу довольно просто, используя средства сетевых API Windows (Не сложнее и под Linux/Unix). По этому, я бы рекомендовал посмотреть в первую очередь именно "чистое" программирование, без использование компонентов Delphi - в этом случае вы не только поймете суть, но и возможно, более оптимально и эффективно реализуете поставленную задачу. Смотреть можно любые примеры - как на С/С++ так и на Delphi - там по сути одно и то же (разница только в типах передаваемых параметров может быть).

«Delphi 7. Для профессионалов» М. Кэнту издательства «Питер». Там довольно хорошо изложен материал и не только по сетям.

Delphi 7. Для профессионалов, М. Кэнту (электронный вариант)

описание TClientSocket
оп исание TServerSocket
Windows Socket API в Delphi

Delphi: Организация связи между компьютерами через TCP/IP протокол.

Эффективное программирование TCP/IP. Библиотека программиста Jon Snader

Также, неплохая книга «К. Джамса, К. Коуп. Программирование для Internet в среде Windows», описание идет на языке С но понятия в целом от этого не страдают, как и функции API Windows, которые можно (и нужно) использовать в Delphi.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Практикант)
Ответ отправлен: 26.10.2007, 23:00
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ссылки! К сожалению, везде в инете статьи с использованием TClientSocket и TServerSocket, а в D7 их уже нема.....
Но все равно спасибо, особенно за ссылку на книгу


Вопрос № 107.084
Доброго времени суток, уважаемые эксперты

Подскажите, пожалуйста, как сделать, чтобы при наведении курсора на ячейку DBGrid появлялась подсказка (Hint) с текстом значения ячейки, расположенной под курсором (необходимо для отображения значений, не умещающихся в ячейке)
Отправлен: 28.10.2007, 11:38
Вопрос задал: Tanir2404 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Drbear
Здравствуйте, Tanir2404!

попробуйте такой код:

procedure аorm1.dbgrid1mousemove(sender: tobject;
shift: tshiftstate; x, y: integer);
var
r: integer;
c: integer;
begin
dbgrid1.mousetocell(x, u, c, r);
with dbgrid1 do
begin
if ((row <> r) or(col <> c)) then
begin
row := r;
col := c;
application.cancelhint;
dbgrid1.hint :=inttostr(r)+#32+inttostr(c);
end;
end;
end;

при необходимости можно поставить задержку отображения (sleep)
и вывести в hint текст ячейки, а не ее позицию.
Ответ отправил: Drbear (статус: 3-ий класс)
Ответ отправлен: 29.10.2007, 09:26


Вопрос № 107.167
Здрасти всем. 1)Как сохранит текст в програме, а тоесть в edit написал чёто и закрыл прогу а потом включаеш а это чёто осталось. 2) как организовать скриншот экрана на сервере через UDP. 3)как узнать активное окно на сервере. Зарание большое спасибо!
Отправлен: 28.10.2007, 21:54
Вопрос задал: Мокроусов Алексей Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Pif-paf
Здравствуйте, Мокроусов Алексей Сергеевич!

1)Базу данных используйте
Ответ отправил: Pif-paf (статус: 1-ый класс)
Ответ отправлен: 01.11.2007, 09:29


Вопрос № 107.344
Здравствуйте!
Скажите, пожалуйста, как можно сохранить размеры и расположение формы, чтобы после очередного запуска программы, они остались теми же.
Отправлен: 30.10.2007, 10:20
Вопрос задал: Skvitek (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Dragon
Здравствуйте, Skvitek!
Этот пример показывает, как можно сохранять настройки с помощью ini-файла. Ini-файлы удобны тем, что после удаления программы без деинсталяции в реестре не остается "следов". Еще это удобно тем, что для "сброса" настроек программы достаточно удалить ini-файл.
Эта программа сохраняет позицию и размер окна, содержимое поля ввода Edit1, число, введенное в Edit2, флажок CheckBox1, а также содержимое ListBox1 (добавить в него строчку можно, нажав на кнопку).

Приложение:

Ответ отправил: Dragon (статус: 2-ой класс)
Ответ отправлен: 30.10.2007, 10:49

Отвечает: Degtyarev Anton
Здравствуйте, Skvitek!
Для сохранения параметров формы используйти Ini фаил настроики и такой код

Впринцепе туда можно вписать всё что угодно, а потом соответсвенно извлеч

в Uses не забудте прописать IniFiles

Приложение:

---------
Сколько волка не корми, а слон всё равно толще

Ответ отправил: Degtyarev Anton (статус: 2-ой класс)
Ответ отправлен: 30.10.2007, 11:26

Отвечает: Vas177
Здравствуйте, Skvitek!

В дополнение к предыдущим ответам, также желательно сохранить WindowState, которое хранит состояние окна (нормальное или развёрнутое). Если окно развёрнутое на весь экран, то его размеры сохранять не целесообразно.

ExtractFilePath(Application.ExeName) + 'settings.ini' - файл будет создан в каталоге с файлом приложения.

Приложение:

Ответ отправил: Vas177 (статус: 1-ый класс)
Ответ отправлен: 30.10.2007, 12:03

Отвечает: Нифонтов Максим
Здравствуйте, Skvitek!
Используйте ini - файл, или регистр. Пример в приложении

Приложение:

Ответ отправил: Нифонтов Максим (статус: 1-ый класс)
Ответ отправлен: 30.10.2007, 12:28
Оценка за ответ: 5

Отвечает: Omickron
Здравствуйте, Skvitek!

Используйте ini-файлы. (модуль IniFiles)

Приложение:

Ответ отправил: Omickron (статус: 5-ый класс)
Ответ отправлен: 30.10.2007, 14:00
Оценка за ответ: 4

Отвечает: Genia007
Здравствуйте, Skvitek! Сохпанять данные о форме можно либо в реестре, либо в ini файлах, либо в в своём файле. Предлагаю функции работы с реестром, по такому принципу можно сохранять любую информацию о любом компоненте формы.

Приложение:

Ответ отправил: Genia007 (статус: 1-ый класс)
Ответ отправлен: 31.10.2007, 23:24


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

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

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

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

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


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


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

В избранное