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

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

Автор: akaGM
Дата сообщения: 12.02.2012 13:05
Frodo_Torbins

Цитата:
нельзя было бы перекомпилировать
это я вообще-то о себе, а если нельзя ему, то зачем тогда спрашивать, чтобы экзюк раскрякать?


Цитата:
Экран -> 125%". То есть с помощью этой настройки можно было бы увеличить шрифт в этой проге, попутно увеличив шрифт во всей системе. Вот только jr13ster уже написал, что такой вариант ему не подходит
мне тоже :)
из-за одной программы во всей системе? -- не наш метод, сейчас лучше посоветую ему воспользоваться лупой, можно экранной, можно настоящей :)
Автор: jr13ster
Дата сообщения: 12.02.2012 14:45
Frodo_Torbins
Ваш вариант "забрал", в среду отпишусь прокатило или как...
Автор: akaGM
Дата сообщения: 12.02.2012 14:56
jr13ster
я тоже посмотрел, переписан тот же TOsnova.Fontdialog2Click...

хорошая идея сохранять его в конфиге, а если при этом есть возможность его загружать чтобы не переустанавливать каждый раз -- тогда вообще всё в шоколаде...

---
есть...
не увидел с первого раза, тогда бери вариант Frodo_Torbins не задумываясь, и не забудь его поблагодарить :)
Автор: Frodo_Torbins
Дата сообщения: 12.02.2012 15:04
akaGM
Да, откомпилить в конце концов удалось, так что поправить код не составило большого труда. Но остается вопрос, правильно ли я выбрал версию компоненты для работы с COM-портом.
Автор: akaGM
Дата сообщения: 12.02.2012 15:29
"всё будет хорошо" :)
Автор: akaGM
Дата сообщения: 12.02.2012 19:17
jr13ster
да, и не забудь самое главное: изменить юнит about.pas, добавив туда имя
Frodo_Torbins :)
Автор: akaGM
Дата сообщения: 13.02.2012 15:45
а вот у меня такая задачка...

есть здоровенный файл common.inc такого формата:
Код: //prototypes
function f1();
function f2();
function f3();

//implementation
function f1();
begin
end;

function f2();
begin
end;

function f3();
begin
end;
Автор: Grande
Дата сообщения: 14.02.2012 06:12
Прошу не пинать за, возможно, элементарный вопрос - давно не пользовался WinAPI
Вопрос такой:
Необходимо запустить внешнее приложение с помощью CreateProcess и оставить его крутиться, пока не понадобится. Здесь проблем нет.
А вот как потом отправить этому приложению сообщение, ведь дескриптор главного окна вновь созданного приложения CreateProcess не возвращает? Пользоваться FindWindow или этот дескриптор где-то все-таки спрятан в PROCESS_INFORMATION?
Спасибо.
С уважением, Сергей ака Grande.
Автор: A_V
Дата сообщения: 14.02.2012 11:50
Grande
CreateProcess не знает ни про какие окна, так что да, искать самому после WaitForInputIdle
Автор: Grande
Дата сообщения: 14.02.2012 13:28
Спасибо, придется так и сделать.
Автор: Frodo_Torbins
Дата сообщения: 14.02.2012 15:09
Grande
Имея хендл процесса, перечислить все его окна и найти главное не проблема.
Автор: Grande
Дата сообщения: 15.02.2012 06:54
Всё, починил
Использовал CreateProcess, потом FindWindow - пока работает.
Автор: Frodo_Torbins
Дата сообщения: 15.02.2012 11:56
Grande
FindWindow плох тем, что может вернуть хендл окна, принадлежащего совершенно другому процессу.
Автор: A_V
Дата сообщения: 15.02.2012 12:29
Grande
лучше искать через EnumWindows + GetWindowThreadProcessId
Автор: Aleksandr N
Дата сообщения: 15.02.2012 14:03
Подскажите, может и дурацкий вопрос, но можно-ли убрать тень окна, которая была создана так:
Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
после показа формы?
Автор: vetal71
Дата сообщения: 15.02.2012 15:58
всем привет
следующий код дает ошибку (List out of bounds ...)

Код:
for I := 0 to ComponentCount - 1 do
begin
Item := Components[ I ];
if Item.ClassNameIs( 'TTBXItem' ) then
begin
J := TTBXItem( Item ).Tag;
IsFiltered[ J ] := TTBXItem( Item ).Checked;
end;
end;
Автор: wasilissk
Дата сообщения: 15.02.2012 16:16

Цитата:
В чем может быть прикол ?

В методе SetItem?
Автор: akaGM
Дата сообщения: 15.02.2012 16:18
vetal71

а Item что у тебя?
и в каком классе этот цикл работает?
Автор: Frodo_Torbins
Дата сообщения: 15.02.2012 16:19
Aleksandr N
Можно: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591%28v=vs.85%29.aspx
Автор: A_V
Дата сообщения: 15.02.2012 16:22
Aleksandr N
SetClassLong(Handle, GCL_STYLE,
GetClassLong(Handle, GCL_STYLE) and not CS_DROPSHADOW);
vetal71
Возможно компонент внутри цикла (в сеттере у Item например) уничтожается. поставь брейкпойнт в начале цикла - потом на TComponent.Destroy и смотри стек
Не, есть лучше идея:
у тебя локальных переменных Components или ComponentCount не объявлено?
Автор: Aleksandr N
Дата сообщения: 15.02.2012 16:46
Frodo_Torbins
A_V
Странное что-то. Мало того что тень не убирается, при закрытии форма гарантированно уничтожается, а вот новая форма появляется уже без тени (форма вызывается из главной). Может ещё какая-то команда нужна?
Автор: A_V
Дата сообщения: 15.02.2012 16:56
Aleksandr N
попробуй с RecreateWnd
Автор: Aleksandr N
Дата сообщения: 15.02.2012 17:12
A_V
Точно.
Нашел ещё так (может кому понадобится) без RecreateWnd работает

Procedure TSkin_Form.RebuildShadow(_b:boolean);
const CS_DROPSHADOW = $00020000;
var old: THandle; x,y:integer;
begin
if not(IsWinXP) then exit;
old := GetWindowLong(MainForm.handle,GCL_STYLE);
if _b then begin
if not((old and CS_DROPSHADOW)=CS_DROPSHADOW) then begin
SetClassLong(MainForm.handle, GCL_STYLE, old or CS_DROPSHADOW);
MainForm.RecreateleForm;
end;
end else begin
if (old or CS_DROPSHADOW)=CS_DROPSHADOW then begin
ShowWindow(MainForm.handle, SW_HIDE);
SetClassLong(MainForm.handle, GCL_STYLE, old and not CS_DROPSHADOW);
ShowWindow(MainForm.handle, SW_NORMAL);
end;
end;
end;
Автор: vetal71
Дата сообщения: 15.02.2012 17:14
akaGM

Цитата:
а Item что у тебя?
и в каком классе этот цикл работает?

Item :TComponent;
класс TForm

Автор: akaGM
Дата сообщения: 15.02.2012 17:55
vetal71
чёрт его знает...
проверь всё то, что тебе советовали выше...
+
вроде твой список компонент слетает...
тебе надо на своей форме все компы пробежать?
я бы попробовал ещё так жёстко:

ТвояФорма.ComponentCount
self.ComponentCount
Item := ТвояФорма.Components[I];
Item := self.Components[I];
однофигственное...
Автор: jr13ster
Дата сообщения: 15.02.2012 17:57
akaGM, Frodo_Torbins
Отписываюсь как обещал.

Начал с варианта Frodo_Torbins. Раньше было так, как на скрине, а стало так, как на этом скрине. На втором скрине видно, что нарушен формат вывода (при размере шрифта 8 тоже), как выровнять х.з. PS. Выбор шрифта работает, и сохраняется.

Вариант akaGM не удалось попробовать, т.к. требуется переустановка Delphi.

Огромное спасибо за участие.
Автор: akaGM
Дата сообщения: 15.02.2012 18:05
jr13ster

Цитата:
Вариант akaGM не удалось попробовать, т.к. требуется переустановка Delphi.

это как это?

вариант Frodo_Torbins с изменённым методом компилируется/собирается/запускается, а замена в коде комментария требует переустановки Дельфей?
:)


Цитата:
как выровнять х.з.

используй "Courier New"...
тем более что
Цитата:
Выбор шрифта работает, и сохраняется.
Автор: Frodo_Torbins
Дата сообщения: 15.02.2012 18:47
jr13ster
Все дело в типе шрифта. Установите какой-нибудь из моноширинных.
Автор: vetal71
Дата сообщения: 15.02.2012 20:07
akaGM

Цитата:
ТвояФорма.ComponentCount
self.ComponentCount
Item := ТвояФорма.Components[I];
Item := self.Components[I];
однофигственное...


пробовал. я думаю, что тут где-то глюк закрался...
Автор: akaGM
Дата сообщения: 15.02.2012 21:20
vetal71
ну чудес не бывает...
мы же не знаем, что и где у тебя происходит _до_

item := Components[i]
вызывает getcomponent(i), в котором если FComponents = nil, возникает ошибка списка...

ну проверь для порядка

assigned(Components)
length(Components)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


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