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

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


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 238
от 30.10.2003, 20:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 1076
Отправлено ответов: 2234
Активность: 207.6 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Cybernetic Creature
Статус: Профессиональный
Общий рейтинг: 132.41
URL: В разработке
[Подробней >>]
sir henry
Статус: Опытный
Общий рейтинг: 159.63
[Подробней >>]
THE_PRO
Статус: Опытный
Общий рейтинг: 140.12
URL: THE_PRO
[Подробней >>]
 
samum2000
Статус: Доверительный
Общий рейтинг: 129.87
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 121.32
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1064. Вот кусок оконной процедуры: procedure TMyForm.WndProc(var Message: TMessage); var dx, dy: int... (ответов: 1)
Вопрос № 1065. Здравствуйте уважаемые эксперты! Подскажите пожалуйста, существуют ли: 1) компоненты для просмотра т... (ответов: 5)
Вопрос № 1066. Здравствуйте, эксперты. Как мне к моему приложению на Delphi подключить справку? Мне нужно, чтобы пр... (ответов: 3)
Вопрос № 1067. Здравствуйте, эксперты ! Кто знает как заставить свойство типа TCollection сохранять свои итемы в df... (ответов: 2)

Вопросов: 4, ответов: 11


 Вопрос № 1064

Вот кусок оконной процедуры:
procedure TMyForm.WndProc(var Message: TMessage);
var dx, dy: integer;
begin
case Message.Msg of
WM_ENTERSIZEMOVE: begin
oldX := Left;
oldY := Top;
end;
WM_WINDOWPOSCHANGING: begin
with PWindowPos(Message.LParam)^ do begin
dx := x - oldX;
dy := y - oldY;
oldX := x;
oldY := y;
end;
with subForm do begin
left := left + dx;
top := top + dy;
end;

"пример упрощённый, просто для объяснения ситуации"
В общем, просто есть две сцепленные формы - главная(MyForm) и второстепенная(subForm).Предполагается, что при перемещении главной формы, второстепенная будет перемещаться за ней.
А вот почему при перемещении сцепленных форм, на местах их соединений возникает мерцание(у WinAmpa кстати его нет) и как от него избавиться?



Вопрос отправлен: 26.10.2003, 07:40
Отправитель: Владимир

[Следующий вопрос >>] [Список вопросов]

Отвечает Cybernetic Creature

Здравствуйте, Владимир!
if PL.Visible then
if AboutForm.Visible then begin
PL.Left:=Main.Left;
PL.Top:=Main.Top+148;
AboutForm.Left:=Main.Left;
AboutForm.Top:=Main.Top-148
end else begin
PL.Left:=Main.left;
PL.Top:=Main.Top+148
end else begin
AboutForm.Left:=Main.left;
AboutForm.Top:=Main.Top-148

Ответ отправлен: 26.10.2003, 13:11
Отправитель: Cybernetic Creature


 Вопрос № 1065

Здравствуйте уважаемые эксперты!
Подскажите пожалуйста, существуют ли:
1) компоненты для просмотра текстовых файлов неограниченного размера (до 2 Гб). Необходимо, чтобы файл загружался в память по частям, а не целиком, т.е. была работа с буфером.
2) компонент с ListBox'ом, в котором можно бы было управлять цветом каждого отдельного элемента.
Если подобное существует, то где это можно найти?
Благодарю за внимание. :)



Вопрос отправлен: 26.10.2003, 10:37
Отправитель: Shurik

[Следующий вопрос >>] [Список вопросов]

Отвечает Cybernetic Creature

Доброе время суток, Shurik!
Как сделать так, чтобы каждая строка в ListBox имела свой цвет
----------------------------------------------------------
У меня есть два примера процедур OnDrawItem:
procedure TTest.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox).Canvas do
begin
case Index of
0:
begin
Font.Color := clBlue;
Brush.Color := clYellow;
end;
1:
begin
Font.Color := clRed;
Brush.Color := clLime;
end;
2:
begin
Font.Color := clGreen;
Brush.Color := clFuchsia;
end;
end;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;
Вышеприведенный код устанавливает различный цвет у фона и текста в зависимости от номера строки, но он не работает с выделенными/выбранными строками (кстати, не забудьте установить значение свойства ListBox1.Style равным lbOwnerDrawFixed.)
procedure TListTest.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
const
HighLight = 'LINE';
var
TempLine, TempText, TempHigh: string;
TempLeft, TempTop, TempStart: Integer;
OldColor: TColor;
begin
with (Control as TListBox).Canvas do
begin
FillRect(Rect);
TempLeft := Rect.Left + 3;
TempTop := Rect.Top + 1;
TempLine := (Control as TListBox).Items[Index];
while TempLine > '' do
begin
TempStart := Pos(HighLight, AnsiUpperCase(TempLine));
if TempStart > 0 then
begin
TempText := Copy(TempLine, 1, TempStart - 1);
TempHigh := Copy(TempLine, TempStart, Length(HighLight));
Delete(TempLine, 1, TempStart + Length(HighLight) - 1);
end
else
begin
TempText := TempLine;
TempHigh := '';
TempLine := '';
end;
if TempText > '' then
begin
TextOut(TempLeft, TempTop, TempText);
Inc(TempLeft, TextWidth(TempText));
end;
if TempHigh > '' then
begin
OldColor := Font.Color;
if odSelected in State then
Font.Color := clYellow
else
Font.Color := clBlue;
TextOut(TempLeft, TempTop, TempHigh);
Inc(TempLeft, TextWidth(TempHigh));
Font.Color := OldColor;
end;
end;
end;
end;
Это можно протестировать со следующими тремя строками:
'Строка номер один'
'Вторая строка'
'Это строчка номер три'
Есть несколько вещей, достойных упоминания:
Я использую параметр Control для приведения типов ( Control as TListBox ).Items[ Index ], что убедиться в том, что я использую данные ListBox, такой способ позволяет сделать общим данный обработчик события для нескольких компонентов TListBox, например, если у вас имеется пара ListBox на различных страницах TNoteBook.
OldColor и проверка параметра State позволяет быть уверенным, что выбранная строка содержит видимый цвет шрифта (множество видеодрайверов используют белый текст на синем фоне для выбранной строки).
Также я создаю небольшое свободное пространство вокруг текста - увеличиваю TListBox.ItemHeight и, соответственно, область вывода текста - TempLeft := Rect.Left + 3 и TempTop := Rect.Top + 1.

Ответ отправлен: 26.10.2003, 13:11
Отправитель: Cybernetic Creature


Отвечает sir henry

Здравствуйте, Shurik!
www.delphikingdom.com
www.delphimaster.ru
www.torry.net
Большой выбор компонентов :)).

Ответ отправлен: 27.10.2003, 06:32
Отправитель: sir henry


Отвечает THE_PRO

Доброе время суток, Shurik!
1)Ispolzuy RichEdit!
2)ListBox: OnItemDraw, zadayesh nujniy tebe ЦВЕТ!

Ответ отправлен: 27.10.2003, 09:13
Отправитель: THE_PRO


Отвечает samum2000

Здравствуйте, Shurik!
1) На самом деле компоненты для этого не нужны, реализовать чтение таких файлов легко реализовать самому (читать частями из файла, и частями выводить в Memo или RichEdit).
2)Например, если ты хочешь изменить цвет фона каждой строчки, то можешь воспользоваться примерно такой процедурой для обраоботки события OnDrawItem.
procedure TForm1.ListBox1DrawItem
(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
myColor: TColor;
myBrush: TBrush;
begin
myBrush := TBrush.Create;
with (Control as TListBox).Canvas do
begin
if not Odd(Index) then
myColor := clSilver
else
myColor := clYellow;
myBrush.Style := bsSolid;
myBrush.Color := myColor;
Windows.FillRect(handle, Rect, myBrush.Handle);
Brush.Style := bsClear;
TextOut(Rect.Left, Rect.Top,
(Control as TListBox).Items[Index]);
MyBrush.Free;
end;
end;
Только не забудь изменить свойство Style в TListBox на lbOwnerDrawFixed.

Ответ отправлен: 27.10.2003, 12:58
Отправитель: samum2000


Отвечает _vt

Приветствую Вас, Shurik!
1) А почему нет? Искать нужно на torry.net, где же еще... У меня их штуки три, а там их больше...

*** E-Man - we are waiting for you ***


Ответ отправлен: 27.10.2003, 02:25
Отправитель: _vt


 Вопрос № 1066

Здравствуйте, эксперты.
Как мне к моему приложению на Delphi подключить справку? Мне нужно, чтобы при нажатии на F1 появлялась первая страница справки. Я нашел в опциях проекта строку HelpFile, указал там имя файла справки, но все равно ничего не вызывается. Пытался сам обрабатывать нажатие клавиши, но у TApplication несколько методов для работы со справкой и все они у меня срабатывают не так как хотелось бы. Неужели так сложно здесь вызывать справку или я чего-то не понимаю?



Вопрос отправлен: 27.10.2003, 09:38
Отправитель: Eugene

[Следующий вопрос >>] [Список вопросов]

Отвечает THE_PRO

Добрый день, Eugene!
Samiy prostoy sposob:
Alqoritm takoy:
Pri najatii knopki F1 otkrit fayl *.hlp
I vse!

Ответ отправлен: 27.10.2003, 17:24
Отправитель: THE_PRO


Отвечает Cybernetic Creature

Добрый день, Eugene!
Попробуйте АПИ функцию ShellExecute
procedure HelpClick(Sender: TObject);
begin
ShellExecute(Application.Handle,'open','myhelp.hlp','','',SW_SHOW);
end;

Ответ отправлен: 29.10.2003, 20:28
Отправитель: Cybernetic Creature


Отвечает sir henry

Доброе время суток, Eugene!
У каждого элемента формы есть свойство HelpContext. Ему надо присвоить номер топика, который в Вашей справке описывает этот элемент.

Ответ отправлен: 27.10.2003, 13:16
Отправитель: sir henry


 Вопрос № 1067

Здравствуйте, эксперты !
Кто знает как заставить свойство типа TCollection сохранять свои итемы в dfm ? Объясните плиз, а то никак врубиться не могу...
Пример:
TMyClass = class(TDBGrid)
private
FCol: TCollection;
published
property MyCol: TCollection read FCol write FCol;
end;
Дык как сделать так, чтоб созданные в элементы сохранялись в dfm (как Columns например), а не терялись безвозвратно между пересозданиями формы-владельца ?



Вопрос отправлен: 27.10.2003, 12:01
Отправитель: Beetle

[Следующий вопрос >>] [Список вопросов]

Отвечает THE_PRO

Приветствую Вас, Beetle!
Mojesh soxranyat ix v dvoichniye fayli ryadom s prilojeniyem.

Ответ отправлен: 27.10.2003, 17:26
Отправитель: THE_PRO


Отвечает sir henry

Доброе время суток, Beetle!
Содержимое TCollection - объекты, поэтому необходимо создать файл, который соответствует типу объекта, запихиваемому в TCollection и скидывать в него все объекты. dfm - это описание формы, а в форме данные не предполагаются, только контролы и самые необходимые их свойства (которые не идут по умолчанию).
И еще. Насколько я помню, TDBGrid работает с таблицами базы данных, так почему бы Вам не хранить эти самые итемы в таблице БД?

Приложение:

Ответ отправлен: 27.10.2003, 13:08
Отправитель: sir henry



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (33)
C / C++ (27)
Perl (3)
Builder / Delphi (22)
Pascal (20)
Basic / VBA (6)
Java / JavaScript (6)
PHP (11)
Криптография (8)
WinAPI (13)
Пользователю
Windows 95/98/Me (48)
Windows NT/2000/XP (62)
"Железо" (37)
Поиск информации (27)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (14)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (6)
КоАП (6)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное