Вот кусок оконной процедуры: 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 кстати его нет) и как от него избавиться?
Здравствуйте, Владимир! 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'ом, в котором можно бы было управлять цветом каждого отдельного элемента. Если подобное существует, то где это можно найти? Благодарю за внимание. :)
Доброе время суток, 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 несколько методов для работы со справкой и все они у меня срабатывают не так как хотелось бы. Неужели так сложно здесь вызывать справку или я чего-то не понимаю?
Добрый день, 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 например), а не терялись безвозвратно между пересозданиями формы-владельца ?
Приветствую Вас, 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.