Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: Frodo_Torbins
Дата сообщения: 29.06.2008 23:11
ASE_DAG
По-моему тут надо ставить хук (hook, глобальный перехватчик).
Автор: ASE_DAG
Дата сообщения: 29.06.2008 23:40
Frodo_Torbins
А поподробнее?
Автор: nhdrthsruyy
Дата сообщения: 30.06.2008 09:16
ASE_DAG
а если форму невидимой сделать?
Автор: ASE_DAG
Дата сообщения: 30.06.2008 09:34
nhdrthsruyy
А она видимая (fsStayOnTop), но неактивная.
Автор: Frodo_Torbins
Дата сообщения: 30.06.2008 09:46
ASE_DAG
Учимся пользоваться поиском: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=548
Автор: OdesitVadim
Дата сообщения: 30.06.2008 09:59
Maks150988
я думаю вся загвоздка в функции BASS_ChannelGetData(Stream, @fft, BASS_DATA_FFT1024);
надо либо в поток выносить, либо ещё что то думать.

Попробуй профилировщиком пройтись, но думаю он тоже на эту строку укажет.
Автор: Maks150988
Дата сообщения: 30.06.2008 17:17
OdesitVadim
Пришлось немного извратиться. Результат по ссылке.
http://stream-player.narod.ru/test/spectrum_test.zip
Однако хотелосьбы перекрасить рисуемые полоски в цикле. Не получается. Они все равно черным цветом.


Код:
for IdxSpm := 1 to 256 do
begin
// RedBrush := CreateSolidBrush(RGB(255, 0, 0));
// RedBrushOld := SelectObject(hdcMem, RedBrush);
MoveToEx(hdcMem, IdxSpm, RctSpm.Bottom - RctSpm.Top, nil);
LineTo(hdcMem, IdxSpm, (RctSpm.Bottom - RctSpm.Top) - Round(fft[IdxSpm] * (RctSpm.Bottom - RctSpm.Top) * IdxSpm));
// SelectObject(hdcMem, RedBrushOld);
// DeleteObject(RedBrush);
end;
Автор: ASE_DAG
Дата сообщения: 02.07.2008 03:36
Frodo_Torbins
Спасибо, немного понял.
Аналогичный вопрос, возникает ли какое-нибудь событие при перемещении формы?
Автор: Frodo_Torbins
Дата сообщения: 02.07.2008 10:08
ASE_DAG
При перемещении винда посылает окну несколько сообщений. Например: WM_MOVE, WM_MOVING, WM_WINDOWPOSCHANGED, WM_WINDOWPOSCHANGING. Перехватываются они аналогичным способом.
Автор: greenpc
Дата сообщения: 02.07.2008 10:13
ASE_DAG
в public части формы новый метод.
procedure WMMove(var mess:TWMMove);message WM_Move;
и там делать свою обработку
Автор: Bill_PHO
Дата сообщения: 02.07.2008 14:21
Может ли кто объяснить, почему в Delphi 7 получается разный результат в выражениях:

S1:=FormatFloat('#0.00',8.925);
S2:=FormatCurr('#0.00',8.925);
Автор: Granmer
Дата сообщения: 02.07.2008 16:01
Bill_PHO

Цитата:
S1:=FormatFloat('#0.00',8.925);
- используется арифметическое округление (5 - в большую сторону)

Цитата:
S2:=FormatCurr('#0.00',8.925);
- используется т.н. банковское округление (к ближайшему четному)

Автор: Bill_PHO
Дата сообщения: 02.07.2008 17:33
Granmer
Спасибо, однако.
А это документировано где-нибудь?
Что-то я не находил.
Автор: Kilich
Дата сообщения: 02.07.2008 23:06
Granmer
спасибо - я тоже нигде не встречал в доках!
Автор: ASE_DAG
Дата сообщения: 03.07.2008 01:19
Frodo_Torbins greenpc
Спасибо, разобрался. Если можно следующий вопрос. =)
Есть:
BgCol: TLabel;
BgCol.Color: TColor;
PCol: ^TColor;
Пытаюсь:
PCol := @BgCol.Color;
PCol^ := Desktop.Pixels[Point.X, Point.Y]; //Это точка на экране.
Получилось:
FgCol.Color = {к-либо цвет: Cardinal};
А визуально цвет лейбла не изменился. Почему?
Автор: Granmer
Дата сообщения: 03.07.2008 08:05
Bill_PHO
Kilich
Работаю с учетными ИС, поэтому столкнулся в своё время. А в хелпе скорее всего было, хотя я в инете искал инфу об этом.
Автор: Mandor Sawall
Дата сообщения: 03.07.2008 08:35
ASE_DAG
В общем, ето неправильно - получат ссылку на property. Неизвестно, что получиш - в зависимости есть ли етого property Read- и Write- методы - ссылку на метод или на свойство...
Измените алгоритм.
Автор: Frodo_Torbins
Дата сообщения: 03.07.2008 09:10
ASE_DAG
Зачем такая странная конструкция?
Делайте или напрямую: BgCol.Color := Desktop.Pixels[Point.X, Point.Y]. Или тогда переменную заводите MyColor: TColor.
Автор: ASE_DAG
Дата сообщения: 03.07.2008 15:15
Mandor Sawall
Я, как вы поняли, в этом не совсем разбираюсь, но меня удивило что свойство BgCol.Color установилось как надо, я его могу прочитать, но визуально это не отразилось. То есть осталось заставить BgCol перечитать свои свойства, это возможно?

Frodo_Torbins
Я еще не знаю какому из лейблов менять цвет. Т.е.
PCol := @BgCol.Color; и PCol^ := Desktop.Pixels[Point.X, Point.Y]; находятся в разных процедурах. Причем вызываются именно в этом порядке.
Ничего более умного, чем указатели в голову не пришло.
Автор: ASE_DAG
Дата сообщения: 03.07.2008 18:32
Кстати, да. Если заставить "перечитать" свойства конструкцией BgCol.Hide; BgCol.Show; отображает как надо.
Но решилось проще, т. Mandor Sawall был прав, поставил указатель на BgCol - стало работать нормально.
Автор: Dimoniusis
Дата сообщения: 03.07.2008 19:58
ASE_DAG можно просто попросить сделать invalidate
Автор: ASE_DAG
Дата сообщения: 03.07.2008 23:38
Dimoniusis
Извиняюсь, не понял...
Автор: Vityarik
Дата сообщения: 04.07.2008 07:25
ASE_DAG

BgCol.Invalidate
Автор: LavriKLAVRIKOV
Дата сообщения: 04.07.2008 07:33
Помогите люди добрые!!! Надо написать программу для приема и обработки данных от нескольких внешних устройств подключеных через FTDI (FT232BM). Обязательно через FT_W32... функции. Причем прем должен быть строгим, без потерь. А через FT_W32_ClearCommError не получается, слишком медленно. Кто-нить что подобное делал? Где поискать примеры??? На офицальном сайте FTDI ничего нет. АбЫдно...
Автор: OdesitVadim
Дата сообщения: 04.07.2008 12:50
ASE_DAG
У нас на фирме за такой код пинают ногами. Правильно делать надо не так.
Надо в процедуру передавать переменную типа TLabel и не заниматся ерундой. И всё будет хорошо. А то что ты делаешь - просто грязный хак и без понимания, как оно там внутри работает - не стоит даже пытаться.
И не надо будет удивляться, если такие методы будут работать например на 7 делфи и перестанут на 2007 - вполне обычная ситуация.
Автор: ASE_DAG
Дата сообщения: 04.07.2008 16:10
OdesitVadim
Да, ладно, говорю же, что я не программист... Так что меня пинать ногами не будут. =)
Но как ее передать в процедуру, поэтому не понимаю:
Код:
{Сокращено}
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = 192) then begin
PCol^.Color := Desktop.Pixels[Point.X, Point.Y];
end;
end;

procedure TMainForm.BgColClick(Sender: TObject);
begin
PCol := @BgCol;
end;
Автор: OdesitVadim
Дата сообщения: 04.07.2008 16:20
вместо pcol будем использоватать переменную типа TLabel (не надо бояться, это уже указатель).
и код будет таким

Код: var mLab:TLabel;
Автор: ASE_DAG
Дата сообщения: 04.07.2008 16:34

Цитата:
копирования объекта не происходит. просто создаётся псевдоним.

Вот, этого не знал, спасибо. Пошел переписывать. =)
Автор: Dimoniusis
Дата сообщения: 04.07.2008 16:44
OdesitVadim красивее не

if mLab<>nil then

а

if Assigned(mLab) then

А при закрытии формы

mLab:=nil; // чтобы даже и не пыталась разрушить
Автор: OdesitVadim
Дата сообщения: 04.07.2008 16:53
Dimoniusis
дело вкуса.
а при закрытии формы не надо так делать. точнее не обязательно в данном случае. Делфи не будет вставлять код для разрушения глобальной переменной (я бы лучше сделал mLab приватным полем формы. Это бы решило кучу проблем и было просто красиво. В случае, если форма создается динамически и может быть создана не одна, а несколько - это уже обязательно надо делать полем формы.).
Но вот по коду такую вставку можно делать. и в таким нехитрым образом проверять, выбранна ли какая-нибудь метка.
to ASE_DAG
кстати, можно свободно будет обращаться и к другим свойствам выбранной метки. в некоторых случаях используя этот приём вместе с свойством Tag/Name можно творить чудеса.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.