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

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


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

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

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

Выпуск № 1061
от 11.02.2008, 15:35

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 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, не каждый ж раз мне их туда перед просмотром сохранять
б)как на форму заргузить картинку. чтоб она сжалась или растянулась( промасштабировалась) на размер формы!!!
Отправлен: 05.02.2008, 17:29
Вопрос задала: Надежда Сергеевна (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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-битную винду? Или лучше использовать несколько потоков?
Спасибо!!
Извиняюсь за ламерский вопрос.
Отправлен: 06.02.2008, 07:59
Вопрос задал: Ренат Байрамгулов (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 11)

Отвечает: 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

Спасибо.
Отправлен: 06.02.2008, 11:11
Вопрос задал: Дегтярев Антон Александрович (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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.


4. Код в приложении.

Удачи!

Приложение:

Ответ отправил: Николай Владимирович / Н.В. (статус: Специалист)
Ответ отправлен: 06.02.2008, 18:41


Вопрос № 121.945
Преведствую Вас уважаемые........есть такая штука
procedure TForm1.Button2Click(Sender: TObject);
var
fail : TIniFile;
ListBox1 : TListBox;
i : integer;
begin
ListBox1 := TListBox.Create(self);
ListBox1.Parent := self;
ListBox1.Visible := false;

Fail := TIniFile.Create('c:Program FilesBirthirthday.ini');
fail.ReadSections(ListBox1.Items);
i := ListBox1.Items.Count+1;
fail.WriteString(inttostr(i), 'date', Edit1.Text);
fail.WriteString(inttostr(i), 'name', Edit2.Text);

fail.Free;
ListBox1.Destroy;
end;

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
Комментарий оценки:
Спасибо большое, но толька я уже сделал, ОСЕНИЛО


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


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

В избранное