Вопрос № 121768: Здравствуйте, господа Эксперты!
Как в Delphi 7 сгенерировать исключение, связанное с выходом индекса за границы массива? Предпочитаю не доверять эту ситуацию компиллятору, а самостоятельно отрабатывать подобные ошибки....Вопрос № 121782: Здравствуйте, уважаемые эксперты! У меня есть такой вопрос: Как в RIchEdit скопировать слово в переменную, которое находится перед курсором?
Заранее спасибо...Вопрос № 121786: Здравствуйте!
Вопросов много!
1) так, при запуске программы форма разворачивается на весь экран) этого добилась)
НО!
у меня на форме ещё
2 Image , которые тоже должны развернуться но только первая- на полэкрана. вторая- на оставш...Вопрос № 121898: Уважаемые эксперты!
Я так понимаю, что если процессор поддерживает инструкции EM64T (core 2 duo E6320) а винда стоит 32х-битная (ХР pro), то проц используется не на полную катушку. Мне нужно производить некоторые математические вычисления. Процес...Вопрос № 121900: Здравствуйте Эксперты!
Я недавно начал программировать на Delphi 7, я хочу зделать чтобы приложение при сворачивании помещалось бы в треею, а значек трееи менялся в зависимости от сутуации.
Помогите пожалуйсто!
Спасибо!...Вопрос № 121918: Уважаемые. Вопрос такого плана:
Как поменять владельца у компонента?
Есть несколько checkBox'ов расположенных на Panel пишу
.....
for i := 1 to Panel1.ComponentCount do
begin
if (Panel2.Components[i] as TCheckBox).Checked<b...Вопрос № 121928: Здравствуйте, уважаемые эксперты! Возникло несколько вопросов:
1) Как в RichEdit зделать,что-бы слово,что хранится в переменной, сменило цвет, а не весь текст.
2) В том же RichEdit как зделать, чтобы при нажатии Таб делался отступ ...Вопрос № 121945: Преведствую Вас уважаемые........есть такая штука
procedure TForm1.Button2Click(Sender: TObject);
var
fail : TIniFile;
ListBox1 : TListBox;
i : integer;
begin
ListBox1 := TListBox.Create(self);
ListBox1.Parent :=...
Вопрос № 121.768
Здравствуйте, господа Эксперты!
Как в Delphi 7 сгенерировать исключение, связанное с выходом индекса за границы массива? Предпочитаю не доверять эту ситуацию компиллятору, а самостоятельно отрабатывать подобные ошибки.
Отправлен: 05.02.2008, 15:26
Вопрос задал: Delph (статус: Студент)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Delph!
uses
SysUtils;
...
if (проверка) then
raise ERangeError.Create('Index out of range');
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 10-ый класс)
Ответ отправлен: 05.02.2008, 15:45 Оценка за ответ: 5 Комментарий оценки: Благодарю за помощь! В моей книге этот вопрос как-то не осветили по нормальному...
Отвечает: Selya
Здравствуйте, Delph!
И чем же вам не угодил компилятор?
Посмотрите в справке ERangeError Class
Пример в приложении.
Приложение:
Ответ отправил: Selya (статус: 6-ой класс)
Ответ отправлен: 05.02.2008, 15:46 Оценка за ответ: 5 Комментарий оценки: Немного усложняете ответ: весь текст процедуры можно было не вписывать. Но тем не менее ставлю пятёрку, т.к. Ваш ответ пришёл практически одновременно с предыдущим и по сути является правильным.
Вопрос № 121.782
Здравствуйте, уважаемые эксперты! У меня есть такой вопрос: Как в RIchEdit скопировать слово в переменную, которое находится перед курсором?
Заранее спасибо
Отправлен: 05.02.2008, 17:00
Вопрос задал: Gaolong (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Denisss
Здравствуйте, Gaolong!
Пример функции, определяющей слово, которое находится перед курсором, находится в приложении.
Пример использования функции: procedure TForm1.Button1Click(Sender: TObject); begin
Label1.Caption:= GetStringBeforeCursor(RichEdit1); end;
Удачи!
Приложение:
--------- Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва ---- Ответ отправлен: 05.02.2008, 20:42
Вопрос № 121.786
Здравствуйте!
Вопросов много!
1) так, при запуске программы форма разворачивается на весь экран) этого добилась)
НО!
у меня на форме ещё
2 Image , которые тоже должны развернуться но только первая- на полэкрана. вторая- на оставшуюся соответственно!
2) так, а как сделать, чтоб кнопки прилипли к верхнему левому углу???????????
и можно тоже самое сдлеать с Image!
3) нифига не поняла!а)
как сделать, чтоб рисунки на фому считывались не из Bin, не каждый ж раз мне их туда перед просмотром сохранять
б)как на форму заргузить картинку. чтоб она сжалась или растянулась( промасштабировалась) на размер формы!!!
Отвечает: alter-sl
Здравствуйте, Надежда Сергеевна!
>> как на форму заргузить картинку. чтоб она сжалась или растянулась( промасштабировалась) на размер формы!!!
-надежда нужно установить следующие параметры у объекта image: Align(alClient) и Stretch(true)
Ответ отправил: alter-sl (статус: 1-ый класс)
Ответ отправлен: 05.02.2008, 18:09 Оценка за ответ: 5
Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Надежда Сергеевна! Про Image:
Чтобы разместить два Image, которые будут растягиваться на половину формы при изменении ее размера, необходимо сделать следующее:
1. разместить на форме оба компонента image
2. левому установить Align=AlLeft, правому Align=AlClient
3. В событии OnResize формы пишите следующий код:procedure TForm1.FormResize(Sender: TObject);
begin
image1.Width := form1.Width div 2;
end;
Теперь при загрузке программы Image-ы будут растягиваться на половину формы.
Также советую выставить Image.Proportional = true, чтобы загруженные рисунки были пропорциональны настоящим, а не вытягивались.
2) так, а как сделать, чтоб кнопки прилипли к верхнему левому углу???????????
Разместите кнопки в левом верхнем углу формы. Они при мастабировании формы не меняют свое местоположение.
Удачи!
Ответ отправил: Николай Владимирович / Н.В. (статус: Специалист)
Ответ отправлен: 05.02.2008, 19:59 Оценка за ответ: 5
Отвечает: Genia007
Здравствуйте, Надежда Сергеевна!
3б). Масштабирование рисунка и загрузка на форму:
Приложение:
Ответ отправил: Genia007 (статус: 5-ый класс)
Ответ отправлен: 08.02.2008, 13:05
Вопрос № 121.898
Уважаемые эксперты!
Я так понимаю, что если процессор поддерживает инструкции EM64T (core 2 duo E6320) а винда стоит 32х-битная (ХР pro), то проц используется не на полную катушку. Мне нужно производить некоторые математические вычисления. Процессы долгие.
Могу ли я в своем приложении использовать процессор на полную мощь или необходимо ставить 64-битную винду? Или лучше использовать несколько потоков?
Спасибо!!
Извиняюсь за ламерский вопрос.
Отвечает: Selya
Здравствуйте, Ренат Байрамгулов!
64-винда предлагает вам несколько другую модель памяти. Каждому процессу теперь не 4-гигабайтовое адресное пространство (как в Win32), а значительно больше.
Чтобы оптимизировать долгие математические вычисления конечно нужно создавать многопоточные приложения. Да, это труднее, и здесь главное не переборщить.
Ответ отправил: Selya (статус: 6-ой класс)
Ответ отправлен: 06.02.2008, 10:20
Вопрос № 121.900
Здравствуйте Эксперты!
Я недавно начал программировать на Delphi 7, я хочу зделать чтобы приложение при сворачивании помещалось бы в треею, а значек трееи менялся в зависимости от сутуации.
Помогите пожалуйсто!
Спасибо!
Отправлен: 06.02.2008, 08:14
Вопрос задал: Socker (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Raptor3
Здравствуйте, Socker!
Оптимальный вариант - это использовать компонент RxTray (RX Library)
Просто бросаем компонент на форму и 90% работы сделано, прямо в компоненте есть хранилище иконок (Icons)
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 5-ый класс)
Ответ отправлен: 06.02.2008, 09:23 Оценка за ответ: 5 Комментарий оценки: Спасибо помогло!
Отвечает: Drbear
Здравствуйте, Socker!
В приложении часть рабочего кода. На форме ImageList, PopupMenu
Приложение:
Ответ отправил: Drbear (статус: 6-ой класс)
Ответ отправлен: 06.02.2008, 10:52 Оценка за ответ: 4 Комментарий оценки: Хотелось бы изнать как можно при нажатии на иконку вывести окно на передний фон?
Вопрос № 121.918
Уважаемые. Вопрос такого плана:
Как поменять владельца у компонента?
Есть несколько checkBox'ов расположенных на Panel пишу
.....
for i := 1 to Panel1.ComponentCount do
begin
if (Panel2.Components[i] as TCheckBox).Checked
then val1 := 'Да'
else Val1 := 'Нет';
.....
Но ComponentCount считает только owner а checkBox который лежит на Panel1 имеет checkBox.owner = Form1; checkBox.Parent = Panel1
Отвечает: DimonSoft
Здравствуйте, Дегтярев Антон Александрович!
Меня, конечно, сейчас начнут забрасывать тухлыми помидорами другие эксперты, но я считаю своим долгом... Короче говоря...
Владелец у компонента по идее меняется обычным присваиванием, особых проблем возникать не должно. Но вот в Вашем коде есть неизмеримо много потенциально ошибкоопасных мест.
Первая грубейшая ошибка здесь:
> for i := 1 to Panel1.ComponentCount do
В справке чёрным по белому написано, что в Components[] элементы занумерованы от нуля до ComponentCount-1, у Вас же нумерация идёт с 1 до ComponentCount. Надо ли объяснять, что Access Violation Вам обеспечен.
> if (Panel2.Components[i] as TCheckBox).Checked
Лёгким движением руки Panel1 превращается в Panel2. Насколько я понимаю, это опечатка при наборе текста программы вместо копирования из исходника. Но в этой строке кроется ещё одна проблема. Вы уверены, что _в_с_е_ компоненты, лежащие на Panel'е - CheckBox'ы? Что там в принципе не может быть других компонентов? Учтите, что если они там появятся - снова AV.
Ваш проблемный CheckBox попробуйте в дереве объектов перетянуть на Panel1. Точнее проверьте, что он там. А вообще - продумайте, может быть, есть более красивое решение стоящей перед Вами задачи, без использования подобных ухищрений? Как показывает практика, вс гениальное просто.
С уважением, DimonSoft.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 06.02.2008, 13:24 Оценка за ответ: 2 Комментарий оценки: Ответа на вопрос я не увидел. Присвоение типа CheckBox1.Owner := TComponent нельзя использовать поскольку это свойство только для чтения. Остальные ошибки легко устранить при компиляции и на них не стоило заострять внимание.
Отвечает: Louken
Здравствуйте, Дегтярев Антон Александрович!
Проверено, работает:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
//Цикл проходим с конца в начало, т.к. при перемещении контрола на другой
//родитель, ControlCount уменьшается на один
for i:=Panel1.ControlCount-1 downto 0 do
//Проверяем что Controls[i] порожден от класса TCheckBox (так безопаснее)
if Panel1.Controls[i] is TCheckBox
//Меняем родителя
then TCheckBox(Panel1.Controls[i]).Parent:=Panel2;
end;
Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 06.02.2008, 22:34 Оценка за ответ: 4 Комментарий оценки: Спасибо за ответ, но проблема в том что parent спокойно меняется как программно так и просто созданием объекта на Panel, возможно повторюсь но мне нужно поменять не Родителя (Perent), а Владельца (Owner).
Вопрос № 121.928
Здравствуйте, уважаемые эксперты! Возникло несколько вопросов:
1) Как в RichEdit зделать,что-бы слово,что хранится в переменной, сменило цвет, а не весь текст.
2) В том же RichEdit как зделать, чтобы при нажатии Таб делался отступ как в других редакторах. Обычно курсор просто пропадает.
3) Возможно ли в RichEdit пронумеровать строки,как в редакторах кода.
4) Как можно "згенерирвать" html код таблицы при указаном количестве столбцов и строк. Тоесть пользователь вводит количество колонок и столбцов и в RichEdit вставляется код таблицы.
Кто что знает- помогите пожалуйста! Буду очень благодарен!
Отправлен: 06.02.2008, 13:31
Вопрос задал: Gaolong (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Николай Владимирович / Н.В.
Здравствуйте, Gaolong!
3. Не знаю, возможно ли такое реализовать в RichEdit, но могу посоветовать сторонний компонент SynEdit. SynEdit is an advanced multi-line edit control, for Borland Delphi and Kylix (C++Builder mostly works, but is unsupported).
It supports syntax highlighting and word-wrap, and it includes code completion and templates components, and exporters for html, tex and rtf.
It is a pure-VCL/CLX control, meaning it is not a wrapper for Microsoft Windows controls and so no run-time library is required.
procedure TForm1.FormActivate(Sender: TObject);
var
st : string;
tudey: string;
name : string;
ListBox1 : TListBox;
fail : TIniFile;
i: Integer;
begin
icon_no:=1;
for i:=1 to 3 do icon_names[i]:= IntToStr(i) + '.ico';
//icon := TIcon.Create;
icon.LoadFromFile(icon_names[icon_no]);
//Timer1.Enabled:=False
ListBox1 := TListBox.Create(self);
ListBox1.Parent := self;
ListBox1.Visible := false;
tudey := datetostr(Date);
tudey := copy(tudey, 1, 5);
fail := TIniFile.Create('c:Program FilesBirthirthday.ini');
fail.ReadSections(ListBox1.Items);
for i := 1 to listbox1.Items.Count do
begin
st := fail.ReadString(inttostr(i), 'date', '');
st := copy(st, 1, 5);
if st = tudey then
begin
name := fail.ReadString('i', 'name', '');
ShowMessage('День рождения у ' + 'name');
st := '';
end;
end;
end;
Всё работает хорошо, но есть одно НО
Вместо того, чтобы выписать в месаге имя и фамилию, он пишед "name", подскажите, как с этим бороться
Отправлен: 06.02.2008, 14:41
Вопрос задал: Sefiros (статус: Посетитель)
Всего ответов: 7 Мини-форум вопроса >>> (сообщений: 7)
Отвечает: BlackRaider
Здравствуйте, Sefiros!
name := fail.ReadString('i', 'name', '');
ShowMessage('День рождения у ' + name);// Убрать аппострофф
Ответ отправил: BlackRaider (статус: 3-ий класс)
Ответ отправлен: 06.02.2008, 14:49
Отвечает: Маренич Владимир
Здравствуйте, Sefiros!
Все дело в том, что Вы написали слово "name" в кавычках, т.е. строковое значение. А надо было написать идентификатор name (без кавычек), что будет интерпретироваться уже не буквально, а как значение переменной name.
Нужно строку
ShowMessage('День рождения у ' + 'name');
заменить на
ShowMessage('День рождения у ' + name);
и все заработает правильно.
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 06.02.2008, 14:50 Оценка за ответ: 5 Комментарий оценки: Всё это канешна харашо, но не работаед, уже сам перепробовал раз десять, не хочет, может проблема хде-та в ини-файле?
Отвечает: Selya
Здравствуйте, Sefiros!
Обратите внимания на кавычки:
ShowMessage('День рождения у ' + 'name'); ->
ShowMessage('День рождения у ' + name);
Ответ отправил: Selya (статус: 6-ой класс)
Ответ отправлен: 06.02.2008, 14:57 Оценка за ответ: 5 Комментарий оценки: извените уважаемая, но нед...........не хочет он работать?
Отвечает: Esi
Здравствуйте, Sefiros!
У Вас name в кавычках:
ShowMessage('День рождения у ' + 'name');
надо
ShowMessage('День рождения у ' + name);
Удачи!
Ответ отправил: Esi (статус: 3-ий класс)
Ответ отправлен: 06.02.2008, 18:55 Оценка за ответ: 5 Комментарий оценки: Пасибачки, но не работаед..........сам ужо таг делал
Отвечает: Евчик Сергей Александрович
Здравствуйте, Sefiros! Вам надо писать name без ковычек вот так: ShowMessage('День рождения у ' + name);
Ответ отправил: Евчик Сергей Александрович (статус: 2-ой класс)
Ответ отправлен: 06.02.2008, 20:13 Оценка за ответ: 5 Комментарий оценки: Не работаед, сам уже и переставлял и чё тока не делал с этими месагами......:((((((((
Отвечает: Genia007
Здравствуйте, Sefiros!
ShowMessage('День рождения у ' + 'name'); В этой строке явная ошибка у параметра name жуно убрать ковычки.
Ответ отправил: Genia007 (статус: 5-ый класс)
Ответ отправлен: 08.02.2008, 13:05 Оценка за ответ: 5 Комментарий оценки: Неа, спасибо, но дело вот в чём: name := fail.ReadString(i,
ame, ); вместо i, надо поставить inttostr(i), ну и нейм конешна без ковычег...........уже сделал спасиба
Отвечает: Сычёв Павел Алексеевич
Здравствуйте, Sefiros!
Замените
name := fail.ReadString('i', 'name', '');
ShowMessage('День рождения у ' + 'name');
на
name := fail.ReadString(inttostr(i), 'name', '');
ShowMessage('День рождения у ' + name);
Ответ отправил: Сычёв Павел Алексеевич (статус: 2-ой класс)
Ответ отправлен: 08.02.2008, 17:58 Оценка за ответ: 5 Комментарий оценки: Спасибо большое, но толька я уже сделал, ОСЕНИЛО