Вопрос № 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 надо создать динамический массив. Помогите решит задачу.
Может это Вам поможет:
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
объявление многоомерного массива
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;
--------- Сколько волка не корми, а слон всё равно толще
Ответ отправил: 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. Хотелось бы найти литературу (желательно рускоянычную) и примеры по данному вопросу.
Отвечает: Виктор Пырлик
Здравствуйте, Разживин Александр Валерьевич!
В целом, организовать такую работу довольно просто, используя средства сетевых API Windows (Не сложнее и под Linux/Unix). По этому, я бы рекомендовал посмотреть в первую очередь именно "чистое" программирование, без использование компонентов Delphi - в этом случае вы не только поймете суть, но и возможно, более оптимально и эффективно реализуете поставленную задачу. Смотреть можно любые примеры - как на С/С++ так и на Delphi - там по сути одно и то
же (разница только в типах передаваемых параметров может быть).
«Delphi 7. Для профессионалов» М. Кэнту издательства «Питер». Там довольно хорошо изложен материал и не только по сетям.
Также, неплохая книга «К. Джамса, К. Коуп. Программирование для 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)как узнать активное окно на сервере. Зарание большое спасибо!
Отвечает: 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