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

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

Автор: MrZeRo
Дата сообщения: 27.04.2010 13:31
OOD
Скорее всего, таблица действительно занята.
Вот фрагмент кода с дополнительными проверками: hччз://www.delphicorner.f9.co.uk/articles/db15.htm
Автор: sly konrad
Дата сообщения: 27.04.2010 16:47
Работаю с шаблоном Microsoft Word

Код:
WordApp := CreateOleObject('Word.Application');
WordApp.Documents.Add(Template);
Автор: JohnSilver182
Дата сообщения: 28.04.2010 18:33
Hi
Я тут думаю про SDI .
КАк Обрезать главную форму чтобы у нее были видны визуальные компоненты . Form1.AutoSize=true что то не канает .
Автор: Frodo_Torbins
Дата сообщения: 28.04.2010 19:44
JohnSilver182
Чем именно не канает?
Автор: Maks150988
Дата сообщения: 28.04.2010 19:49
Помогите оптимизировать код. Я хочу нарисовать сетку, которая подобна визуализатору винампа.
[more=Было]
Код: var
w: Integer;
h: Integer;
begin
SetPixel(hdcIn, 0, 0, RGB(0, 0, 0));
SetPixel(hdcIn, 1, 0, RGB(0, 0, 0));
SetPixel(hdcIn, 1, 10, RGB(0, 0, 0));
SetPixel(hdcIn, 0, 12, RGB(0, 0, 0));
SetPixel(hdcIn, 1, 12, RGB(0, 0, 0));
SetPixel(hdcIn, 1, 14, RGB(0, 0, 0));
SetPixel(hdcIn, 0, 24, RGB(0, 0, 0));
SetPixel(hdcIn, 1, 24, RGB(0, 0, 0));
for h := 0 to (MAX_HEIGTH - 3) do
if not Odd(h) then
SetPixel(hdcIn, 2, h, RGB(0, 0, 0));
for h := 0 to (MAX_HEIGTH - 3) do
if not Odd(h) then
SetPixel(hdcIn, MAX_WIDTH - 3, h, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 1, 0, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 2, 0, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 2, 10, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 1, 12, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 2, 12, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 2, 14, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 1, 24, RGB(0, 0, 0));
SetPixel(hdcIn, MAX_WIDTH - 2, 24, RGB(0, 0, 0));
for w := 2 to (MAX_WIDTH - 3) do
if not Odd(w) then
SetPixel(hdcIn, w, MAX_HEIGTH - 3, RGB(0, 0, 0));
SetPixel(hdcIn, 10, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 10, MAX_HEIGTH - 1, RGB(0, 0, 0));
SetPixel(hdcIn, 18, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 26, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 34, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 44, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 44, MAX_HEIGTH - 1, RGB(0, 0, 0));
SetPixel(hdcIn, 54, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 62, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 70, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 78, MAX_HEIGTH - 2, RGB(0, 0, 0));
SetPixel(hdcIn, 78, MAX_HEIGTH - 1, RGB(0, 0, 0));
end;
Автор: JohnSilver182
Дата сообщения: 28.04.2010 20:44

Цитата:
Я тут думаю про SDI .
КАк Обрезать главную форму чтобы у нее были видны визуальные компоненты . Form1.AutoSize=true что то не канает .


То есть как была форма здоровая так и осталась

Вот волюнтаристский подход

Код: procedure TFormMain.FormResize(Sender: TObject);
begin
self.Height :=84;
self.Top:=0;
end;
Автор: Frodo_Torbins
Дата сообщения: 28.04.2010 20:53
Maks150988
Создайте DIB-секцию и меняйте ее отдельные байты, потом одним махом отрисовывайте на канве. В Delphi это делается через TBitmap.ScanLine: http://www.delphisources.ru/pages/faq/base/bitmap_scanline_for_pixelformat.html
Автор: Ramazan
Дата сообщения: 28.04.2010 21:10
Вопрос не сколько по программированию, сколько по использованию IDE:

Как известно, Delphi позволяет регистрировать графические форматы для их использования в IDE и программах. Но, например, формат png сейчас не реализует только ленивый, в результате чего, при большом количестве загруженных пакетов, мы имеем несколько классов поддержки формата. В моем случае png поддерживают DevExpress, FastReport и LMD tools.
Механизм поиска класса поддержки построен таким образом, что вне зависимости от того, сколько классов было зарегистрировано для расширения файла, возвращаться всегда будет последний зарегистрированный класс, в моем случае от LMD. Проблема в том, что другие библиотеки, естественно, отказываются использовать этот формат у себя - Invalid graphic format. Решение проблемы заключается в изменении очередности загрузки пакетов компонент, например для поддержки DevEx-формата png необходимо грузить их в таком порядке: FR, LMD, DevExpress.
К сожалению, я не знаю другого метода изменения порядка загрузки, кроме удаления пакетов из IDE и повторная их регистрация в нужной последовательности, что крайне раздражает и отнимает кучу времени. Может быть кто-нибудь знает, где хранится порядок загрузки пакетов в Delphi?

Унифицировать компоненты не предлагать - проще повеситься
Автор: data man
Дата сообщения: 28.04.2010 21:35
Ramazan
Возможно, если изменить порядок пакетов здесь

Код: HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\<версия>\Known IDE Packages
HKEY_LOCAL_MACHINE\SOFTWARE\CodeGear\BDS\<версия>\Known Packages
HKEY_CURRENT_USER\Software\CodeGear\BDS\<версия>\Known IDE Packages
HKEY_CURRENT_USER\Software\CodeGear\BDS\<версия>\Known Packages
Автор: JohnSilver182
Дата сообщения: 28.04.2010 21:59
Вот еще один волюнтаристский подход что бы Пристыковать Подчиненную форму к главной . Работает криво если форма Изначально форма WsMaximized;

С Учетом screen.WorkAreaHeight


Код: Procedure TDm.SuperResize(f:Tform);
var l_Height:integer;
begin
//asdasdas

l_Height:=FormMain.Top+Formmain.Height;
if f.WindowState = wsMaximized then
begin
f.Top:=l_Height;
end;

if (f.WindowState = wsNormal) and (f.Top<l_Height) then f.Top:=l_Height;
if f.Height > screen.WorkAreaHeight- Formmain.Height then f.Height := screen.WorkAreaHeight- Formmain.Height;

end;
Автор: Liaders
Дата сообщения: 28.04.2010 23:46
Раздобыл исходники нужной мне программы написанной на Delphi 3 http://rghost.ru/download/1488230/5bb41f00bcaa09044a5eb76ced9ce0283395a258/cosmosource091.zip. Открывал ее в Delphi 2010, не получается скомпилировать. Установил Toolbar97, который он просил, но он стал жаловаться на другую ошибку. Не могли вы помочь мне привести исходники в работоспособное состояние?
Скомпиленная программа с нужной для нее библиотекой http://rghost.ru/download/1488240/a90875bfb6ee3fd7eb6ead829cc87a476d2cf2df/cosmo091.zip
Автор: Ramazan
Дата сообщения: 29.04.2010 05:20
data man
Насколько я знаю, значения внутри ключа реестра не упорядочены...

А вообще, реестр я проверил в первую очередь, но ничего не нашел. Пытался найти чего-нибудь в файлах Delphi, в том числе и в профиле пользователя. Анализ загрузки (каюсь, достаточно поверхностный) Delphi через ProcessMonitor тоже не дал ничего внятного.
Автор: psa1974
Дата сообщения: 29.04.2010 07:56
Liaders
Изучай [more=материалы по переходу на Дельфи 2010]
Delphi в мире Юникода, часть I: что такое Юникод, зачем он Вам нужен и как с ним работать в Delphi?
Delphi в мире Юникода, часть II: новые возможности RTL и классы для поддержки Юникода
Delphi в мире Юникода, часть III: Юникодификация Вашего кода[/more]
И вообще тебе надо было писать сюда, здесь упоминание Дельфи 2010 является оффтопом.
Автор: JohnSilver182
Дата сообщения: 29.04.2010 09:08
Я уже замучился . Почему я не могу изменить нормально координаты формы
во время события ONSHOW; ONACTIVATE;

Таймеры какие то делаю .


Код: procedure TFormMoikaEdit.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
self.Left:=conf.ReadInteger('forms','box'+l_st.Values['box'],500);
end;
Автор: JohnSilver182
Дата сообщения: 29.04.2010 13:33
Меня никто не любит (
Автор: Maks150988
Дата сообщения: 29.04.2010 13:43
Frodo_Torbins
А "стоит ли игра свеч". Просто у меня не такая большая вырисовка этой сетки. Я так посмотрел на такой способ, как-то труднозатратно и непонятно.
Автор: Frodo_Torbins
Дата сообщения: 29.04.2010 13:54
Maks150988
Используйте готовые решения, тот же TBitmap к примеру. По крайней мере другого более легкого способа добится того что вы хотите я не знаю.
Автор: YuriyRR
Дата сообщения: 29.04.2010 17:20
Ramazan
Он хранится в реестре )
Я разворачиваю среду на компьютерах клиента прописывая компоненты через реестр

[HKEY_CURRENT_USER\SOFTWARE\Borland\Delphi\7.0\Known Packages]

"$(DELPHI)\\COMP\\EXPERTS\\designplus7.bpl"="Design Plus Expert"
"$(DELPHI)\\BIN\\vclx70.bpl"="Borland ExtComps"
"$(DELPHI)\\BIN\\DclTee87.bpl"="TeeChart 8 Components"
"$(DELPHI)\\BIN\\DclTeePro87.bpl"="TeeChart Pro 8 Components"
"$(DELPHI)\\BIN\\DclTGL87.bpl"="TeeChart 8 for OpenGL"
"$(DELPHI)\\BIN\\TeeImage87.bpl"="TeeChart Pro 8 Graphic Formats"
"$(DELPHI)\\BIN\\FIBPlus7.bpl"="FIB Plus Components"
..... как напишешь так и будет
Автор: Bonivur
Дата сообщения: 29.04.2010 19:27
JohnSilver182
Читал читал, так и не врубился чего именно ты хочешь сделать. Правильная постановка задачи - суть залог получения полезного совета или помощи.
Автор: Ramazan
Дата сообщения: 29.04.2010 19:55
YuriyRR
Блин, даже в голову не пришло! Regedit с его принудительной сортировкой все спутал!
Спасибо!
Автор: JohnSilver182
Дата сообщения: 30.04.2010 07:16

Цитата:
JohnSilver182
Читал читал, так и не врубился чего именно ты хочешь сделать. Правильная постановка задачи - суть залог получения полезного совета или помощи.


Ну я вот сделал SDI интерфейс . Форма главная это просто полостка с dxBarManager

а) Есть проверенный код что бы прицеплять подчиненные формы к НИжнему краю главной формы ????? А то они на весь экран раскрываются ..

б) Кажется dxBarManager1 положить на форму и свойство Form1.AutoSize=true идет лесом (( . ТО есть гланая форма САМА НЕ ОБРЕЗАЕТСЯ ДО ПОЛОСКИ . Это плохо.

в) в КАКОМ событии формы можно менять ее координаты ???? У меня даже на событие ONACTIVATE координаты не меняются . ТОлько на ONRESIZE
Автор: Frodo_Torbins
Дата сообщения: 30.04.2010 11:59
JohnSilver182
Все зависит от того, какое поведение должны иметь ваши формы. В общем случае достаточно менять позицию и размер формы по OnResize. Дополнительно можно контролировать позицию окна перехватывая WM_MOVING.
А зачем вам вообще сдался этот AutoSize? Задайте форме нужный размер в дизайнере и BorderStyle=bsSingle.
Автор: Ramazan
Дата сообщения: 30.04.2010 12:59
JohnSilver182
Еще есть такое сообщение WM_GETMINMAXINFO...
Автор: svs123456789
Дата сообщения: 30.04.2010 13:06
подскажите пример (желательно с рус. комменами) по работе с последовательным портом?
Автор: JohnSilver182
Дата сообщения: 30.04.2010 13:10

Цитата:
А зачем вам вообще сдался этот AutoSize? Задайте форме нужный размер в дизайнере и BorderStyle=bsSingle.

Зачем применять фиксированный размер в век 17" до 30" мониторов ??????






Добавлено:

Цитата:
Еще есть такое сообщение WM_GETMINMAXINFO

А это по какому пункту вопроса ??
Автор: Ramazan
Дата сообщения: 30.04.2010 14:44
JohnSilver182
По (а). Как я понял, дочерние формы разворачиваются на весь экран, а нужно чтобы только до нижней границы главной? В обработчике этого сообщения и можно задать границы развертывания.
Автор: Bonivur
Дата сообщения: 30.04.2010 17:13
JohnSilver182

Цитата:
б) Кажется dxBarManager1 положить на форму и свойство Form1.AutoSize=true идет лесом (( . ТО есть гланая форма САМА НЕ ОБРЕЗАЕТСЯ ДО ПОЛОСКИ . Это плохо.

Не работал с компонентом dxBarManager но может сначала кинуть на форму Panel (align - alTop) и далее на Панель уже кидать что нужно?


Цитата:
в) в КАКОМ событии формы можно менять ее координаты ???? У меня даже на событие ONACTIVATE координаты не меняются . ТОлько на ONRESIZE

Ну если на ONRESIZE меняются, что мешает менять? И опять Вы не уточнили - Ваши дочерние формы почему на весь экран раскрываются? В design или run-time?
Автор: Maks150988
Дата сообщения: 01.05.2010 15:20
Frodo_Torbins
Нет, мне надо без оберток, работаю на Api. Посмотрел я что народ использует, а использует он GetDIBits или FastDib (это вообще капут для моих знаний на текущий момент). Ну значит я создал битмап через CreateDIBSection, все нормально, теперь мне нужно заменить пиксели в полученной карте пикселей. Сделал так:


Код:
var
bmi : TBitmapInfo;
bits: Array [0..MAX_WIDTH, 0..MAX_WIDTH] of TRGBTriple;
bi : Bitmap;

//

ZeroMemory(@bmi, Sizeof(TBitmapInfoHeader));
with bmi do
begin
bmiHeader.biSize := SizeOf(TBitmapInfoHeader);
bmiHeader.biWidth := MAX_WIDTH;
bmiHeader.biHeight := MAX_HEIGTH;
bmiHeader.biPlanes := 1;
bmiHeader.biBitCount := 24;
bmiHeader.biCompression := BI_RGB;
end;

GetDIBits(pcp.hdcMem, pcp.hbmMem, 0, MAX_WIDTH, @bits, bmi, DIB_RGB_COLORS);

bits[10, 0].rgbtBlue := 0;
bits[10, 0].rgbtGreen := 0;
bits[10, 0].rgbtRed := 0;

SetDIBits(pcp.hdcMem, pcp.hbmMem, 0, MAX_WIDTH, @bits, bmi, DIB_RGB_COLORS);
Автор: Frodo_Torbins
Дата сообщения: 01.05.2010 20:19
Maks150988
А зачем вам эти GetDIBits/SetDIBits? CreateDIBSection ведь и так возвращает четвертым параметром ссылку на область памяти. Но в любом случае вам надо будет учитывать выравнивание: к каждой строке добавляется несколько байт чтобы ее длина делилась на 4 без остатка. Чтобы избежать проблем с подсчетом выравниваний, можно задать biBitCount =32.
Автор: Maks150988
Дата сообщения: 02.05.2010 12:26
Frodo_Torbins
Ну вот так я создаю битмап:

Код:
bmi : TBitmapInfo;
lpBits : PRGBTriple;

// with bmi.bmiHeader do
begin
biSize := SizeOf(bmi.bmiHeader);
biWidth := MAX_WIDTH;
biHeight := -MAX_HEIGTH;
biPlanes := 1;
biBitCount := 32;
biCompression := BI_RGB;
biSizeImage := 0;
biXPelsPerMeter := 1;
biYPelsPerMeter := 1;
biClrUsed := 0;
biClrImportant := 0;
end;
//
pcp.hbmMem := CreateDIBSection(hdcIn, bmi, DIB_RGB_COLORS, Pointer(lpBits), 0, 0);
//

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


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