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

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


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

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

Выпуск № 807
от 12.05.2007, 06:05

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


Вопрос № 85672: Здравствуйте уважаемые эксперты!Понадобилось мне в приложении сделать многострочный заголовок (только заголовок)StringGrid,увидел у вас в рассылки вопрос 83498 и в нём вот такой код http://delphiworld.narod.ru/base/sg_multilines.html ,всё меня в нём ...
Вопрос № 85690: Здравствуйте ув эксперты. Подскажите пожалуйста,как можно миллисекунды преобразовать в секунды и минуты?...
Вопрос № 85693: Здравствуйте уважаемые эксперты! Помогите пожалуйста разобраться с таким вопросом. Имеется сетка DBGrid, у нее есть popup menu. Мне нужно было, чтобы сетка поддерживала drag-and-drop. Я установил свойство DRagMode сетки в dmManual, т. к. при dmAu...
Вопрос № 85714: TMonthCalendar & TDateTimePicker у меня есть 3 надписи. как внеси в каждую по отдельности дату, месяц, год...
Вопрос № 85715: Ув.эксперты, вопрос: в примере (см.ниже) не работают методы динамически созданных компонент FCCreate и CTTimer? Как сделать, что бы они выполнялись? Может их надо как-то где-то зарегистрировать? Заранее спасибо. unit Unit1; inter...
Вопрос № 85805: Добрый вечер Кинула на форму ListView и кнопку. В ListView в инспекторе сделал вот так: ListView1.Checkboxes := true; ListView1.ViewStyle := vsReport; Подскажите как всем Items в ListView поставить галочки, при нажа...
Вопрос № 85807: А можно сделать так чтобы у другой созданной формы как и у главной на панели задач появилась своя кнопка? ...
Вопрос № 85808: Здравствуйте. Подскажите пожалуйста как узнать интервал времени в миллисекундах прошедший между нажатием Btn1 и Btn2? Как отследить количество нажатий Btn3 и по 3 нажатию выполнить процедуру? Надеюсь на Вашу помощь....

Вопрос № 85.672
Здравствуйте уважаемые эксперты!Понадобилось мне в приложении сделать многострочный заголовок (только заголовок)StringGrid,увидел у вас в рассылки вопрос 83498 и в нём вот такой код http://delphiworld.narod.ru/base/sg_multilines.html ,всё меня в нём устраивает,кроме того ,что текст остаётся не сцентрированным.Помогите доработать этот код.Если коротко надо сцентрированный текст во всей таблице,многострочный заголовок с переносом строки только по запятой и выводящийся жирным шрифтом.
Отправлен: 06.05.2007, 10:34
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss

Здравствуйте, GAZOT!

В приложении приведен измененный код.
Изменение основано на испрользовании функции WinAPI DrawText, у которого можно устанавливать дополнительные флаги (в примере DT_CENTER).
newRect - временный объект, нужный для отрисовки текста в определенной области (сравните два кода - мой и тот, что на сайте, - и Вы поймете откуда он взялся)

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 06.05.2007, 12:16


Вопрос № 85.690
Здравствуйте ув эксперты.
Подскажите пожалуйста,как можно миллисекунды преобразовать в секунды и минуты?
Отправлен: 06.05.2007, 12:51
Вопрос задал: 3dcvir (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Denisss

Здравствуйте, 3dcvir!

Допустим, ms: Integer - милисекунды;
sec: Integer - секунды;
min: Integer - минуты.

Секунды:
sec:= (ms div 1000) mod 60;
минуты:
min:= ms div 60000;

Удачи!
Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 06.05.2007, 13:15
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ.


Вопрос № 85.693
Здравствуйте уважаемые эксперты!
Помогите пожалуйста разобраться с таким вопросом. Имеется сетка DBGrid, у нее есть popup menu. Мне нужно было, чтобы сетка поддерживала drag-and-drop. Я установил свойство DRagMode сетки в dmManual, т. к. при dmAutomatic не происходила установка курсора на нужно строке, и в обработчике OnColEnter написал: BeginDrag(false, 5). Но теперь drag-and-drop и popup menu не желают срабатывать из одного столбца сетки, то есть drag-and-drop работает из 2, 3, 4 столбцов сетки, а popup menu - только из первого. В чем моя ошибка?
Заранее спасибо!
Отправлен: 06.05.2007, 13:24
Вопрос задал: Tanir2404 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Tanir2404!

Ошибка ключевая - Вы пытаетесь использовать DBGrid как элемент манипулирования данными. На самом деле - это только элемент отображения таблицы.

Для того чтобы drag-and-drop нормально и стабильно работал нужно из событий BeginDrag и DragDown брать ID строки и имя поля и формировать SQL-запрос к БД, делать commit и обновлять состояние DBGrid.

В противном случае могут быть ошибки, связанные с кэшированием, которые очень сложно отловить.

---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 06.05.2007, 13:51


Вопрос № 85.714
TMonthCalendar & TDateTimePicker
у меня есть 3 надписи. как внеси в каждую по отдельности дату, месяц, год

Приложение:

Отправлен: 06.05.2007, 16:16
Вопрос задал: VVV_1984
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Gh0stik
Здравствуйте, VVV_1984!

Насколько я понял Вам необходимо вывести ту дату которая выбрана в соответствующем компоненте. Если вы вывод собираетесь организовывать через компоненты TLabel, то код для TMonthCalendar будет такой:

procedure TForm1.MonthCalendar1Click(Sender: TObject);
begin
Label1.Caption:=FormatDateTime('dd',MonthCalendar1.Date);
Label2.Caption:=FormatDateTime('mmmm',MonthCalendar1.Date);
Label3.Caption:=FormatDateTime('yyyy',MonthCalendar1.Date);
end;


А для TDateTimePicker соответственно:
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
Label1.Caption:=FormatDateTime('dd',DateTimePicker1.Date);
Label2.Caption:=FormatDateTime('mmmm',DateTimePicker1.Date);
Label3.Caption:=FormatDateTime('yyyy',DateTimePicker1.Date);
end;


Мы просто используем формат вывода для даты...

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 06.05.2007, 17:06

Отвечает: LEXASOFT
Здравствуйте, VVV_1984!

!!!
Есть еще способ:

Label1.Caption:=IntToStr(DayOf(DateTimePicker1.Date));
Label2.Caption:=IntToStr(MonthOf(DateTimePicker1.Date));
Label3.Caption:=IntToStr(YearOf(DateTimePicker1.Date));

соответственно для TMonthCalendar:

Label1.Caption:=IntToStr(DayOf(MonthCalendar1.Date));
Label2.Caption:=IntToStr(MonthOf(MonthCalendar1.Date));
Label3.Caption:=IntToStr(YearOf(MonthCalendar.Date));

Не написан один существенный момент данные функции не работают без подключения модуля DateUtils (uses DateUtils;)!!! Edited by Gh0stik
Ответ отправил: LEXASOFT (статус: 4-ый класс)
Ответ отправлен: 07.05.2007, 23:18


Вопрос № 85.715
Ув.эксперты, вопрос: в примере (см.ниже) не работают методы динамически созданных компонент
FCCreate и CTTimer? Как сделать, что бы они выполнялись? Может их надо как-то где-то зарегистрировать?
Заранее спасибо.
unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type TC =class(TObject)
FC: TForm;
CT: TTimer;
procedure FCCreate(Sender: TObject);
procedure CTTimer(Sender: TObject);
end;

type TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
end;

var Form1: TForm1;
C: TC;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
C:=TC.Create;//создаем объект
C.FC:=TForm.Create(nil);//форму, описанную в нем
C.FC.Caption:='форма';
C.CT:=TTimer.Create(C.FC);//таймер
C.CT.Interval:=2000;
C.CT.Enabled:=true;//включаем таймер
end;

procedure TC.FCCreate(Sender: TObject);
begin
Showmessage('formcreated');
end;

procedure TC.CTTimer(Sender: TObject);
begin
Showmessage('ontimer');
end;

end.
Отправлен: 06.05.2007, 16:21
Вопрос задал: Ренат Байрамгулов (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Gh0stik
Здравствуйте, Ренат Байрамгулов!

Они не работают потому что Вы к ним не обращаетесь. В приложении смотрите самый простой вариант преобразования вашего кода.

Просто перенесите создание формы и создание таймера в FCCreate и CTTimer соответственно.

Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 06.05.2007, 18:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Все работает.

Отвечает: din
Здравствуйте, Ренат Байрамгулов!
В случае с событием OnCreate нельзя поступить также как и с событием OnTimer, потому что оно генерируется при создании объекта, а до его создания мы переопределить его также не сможем. В общем все в приложении. Сверьте со своим кодом и посмотрите что изменено.

P.S.
Вы знаете когда вы создаете новую форму и думаю нет необходимости вешать какой-либо код на событие OnCreate, его ведь можно выполнить в том же месте где Вы форму и создаете, подумайте над этим.

Удачи!

Приложение:

---------
Есть только одно зло - невежество, и только одно благо - знания

Ответ отправил: din (статус: Практикант)
Ответ отправлен: 06.05.2007, 20:44

Отвечает: monah
Здравствуйте, Ренат Байрамгулов!
Лучше свой класс выделить в отдельный модуль.
Смотрите, приложение.
В Вашей программе достаточно объявить переменную этого класса и вызвать метод Create .

Приложение:

---------
festina lente

Ответ отправил: monah (статус: Студент)
Ответ отправлен: 08.05.2007, 09:53
Оценка за ответ: 5
Комментарий оценки:
нет слов!


Вопрос № 85.805
Добрый вечер

Кинула на форму ListView и кнопку.

В ListView в инспекторе сделал вот так:
ListView1.Checkboxes := true;
ListView1.ViewStyle := vsReport;

Подскажите как всем Items в ListView поставить галочки, при нажатии на кнопку ?

С Уважением, Анна
Отправлен: 07.05.2007, 00:32
Вопрос задал: Павлова Анна Николаевна (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss

Здравствуйте, Павлова Анна Николаевна!

В приложении указан пример установки всех "галочек" при нажатии на кнопку Button1.
Если Вам нужно установить только одну галочку, то метод такой:
ListView1.Items[i].Checked:= True;
Если нужно снять, то:
ListView1.Items[i].Checked:= False;
i - номер строки, в которой нужно установить/снять "галочку". Номер первой строки - 0.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 07.05.2007, 01:25

Отвечает: xXx
Здравствуйте, Павлова Анна Николаевна!
Повторный ответ.
В приложении кусок кода, который помечает все строки компонента галочками...
(edited by Ерёмин А.)

Приложение:

Ответ отправил: xXx (статус: 6-ой класс)
Ответ отправлен: 07.05.2007, 11:47


Вопрос № 85.807
А можно сделать так чтобы у другой созданной формы как и у главной на панели задач появилась своя кнопка?
Отправлен: 07.05.2007, 00:51
Вопрос задал: Мартов С.Е. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, Мартов С.Е.!

Вам достаточно прописать в обработчике OnCreate формы которую Вы вызываете такой оператор:
ParentWindow:=GetDesktopWindow;

В приложении смотрите модули проекта.

Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 07.05.2007, 09:57
Оценка за ответ: 5
Комментарий оценки:
Вот нашёл ещё один вариант. Отличие - при щелке по кнопке на панели задач окно становится активным.

procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;


Вопрос № 85.808
Здравствуйте.
Подскажите пожалуйста как узнать интервал времени в миллисекундах прошедший между нажатием Btn1 и Btn2?
Как отследить количество нажатий Btn3 и по 3 нажатию выполнить процедуру?
Надеюсь на Вашу помощь.
Отправлен: 07.05.2007, 00:55
Вопрос задал: Шмаров Сергей (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Denisss
Здравствуйте, Шмаров Сергей!

Ответ достаточно простой. См. пример в приложении.

Использовал свойства кнопок Tag, чтобы сократить количество используемых переменных. Если Вам это не удобно, то можно завести какие-либо переменные.

По нажатию на кнопку Btn2, результат (интервал времени в миллисекундах) выводится в Label3.

При третьем нажатии на кнопку Btn3, в примере выводится соответствующее сообщение. Вы же просто подмените вывод сообщения на нужную процедуру.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 07.05.2007, 01:14
Оценка за ответ: 5
Комментарий оценки:
Спасибо все работает.Интересует только один вопрос- на сколько велика погрешность в определении интервала времени.

Отвечает: W@NDeReR
Здравствуйте, Шмаров Сергей!
Ставите на форму Timer с вкладки System, свойство Interval ставите = 1, св-во Enabled=False
При нажатии на Btn1 включаем таймер:
Timer1.enabled:=True;
При нажатии на Btn2 выключаем таймер:
Timer1.enabled:=False;
Теперь обьявите 2-е глобальные переменные типа Integer я взял i и o
Дважды кликните по Таймеру и напишите следующее:
i:=i+1; // Увеличивает значение переменной i на 1 каждую милисекунду
Label1.Caption:=IntTOstr(i); //Записывает значение i в Label

Теперь про нажатия 3-и раза:
При нажатии на Btn3 написать следующее:
o:=o+1; // Увеличивает значение переменной i на 1 каждое нажатие на кнопку
if o=3 then //если o=3 то выполнить процедуру
begin
showMessage('Btn3 нажат 3 раза');//У меня воводиться сообщение, у вас может быть что то другое
o:=0; //онуляем переменную o чтобы еще раз можно было нажать 3-и раза
end;
---------
Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 4-ый класс)
Ответ отправлен: 07.05.2007, 08:37
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ все работает,только хотелось бы уточнить какова будет погрешность таймера.


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100

В избранное