Forum Replies Created
-
AuthorPosts
-
alex000Participant
Продолжим:
Пустой TsPageControl без страниц приводит к AV (причем даже desing-time):
Code:object InnerPageControl: TsPageControl
Left = 100
Top = 100
Width = 279
Height = 50
endalex000Participant'Геннадий wrote:У меня компонента на основе TsComboBox компилируется нормально, но при компоновке выдается сообщение “Unresolved external TsCustomComboBox::ComboWndProc
Поиск по форуму “Unresolved external” выдает как минимум 2 подходящие темы:
Не могу скомпоновать наследника TsComboBox в С++ Builder 6
“Unresolved external…” при наследовании от TsPanel
Там же есть советы по решению проблемы.
alex000ParticipantНеужели размер exe-файла так важен ? У меня типичный размер программы – 12 мегабайт 😉
Наверное, размер важен для shareware, при распространении через интернет.
Кстати, упаковка всякими UPX`ами имеет один недостаток – распакованный образ exe-файла постоянно находится в памяти.
TsTreeView, TsListView, TsMemo – их “внутренности” все равно рисуются системой, не знаю что там может лагать, будем надеется что с морганием удастся справится.
Фотошоп использует какой-то хитрый своп, а последних версиях вообще – ускорение видеокартой.
Кстати, ступор при сворачивании/разворачивании через некоторое время может быть связан с вышеупомянутым поведением свопа. У меня дома своп вообще отключен – в результате – программы не тупят, если их развернуть после долгого бездействия 🙂
Станция, которая может выполнять 2.5 миллиарда операций в секунду, также может позволить выделить несколько лишних мегабайт памяти.
Хотя да, в некоторых случаях отрисовка напрямую, минуя кеш может быть полезна – при работе под RDC, например. Чем гонять на клиента огромные битмапы может быть лучше отрисовать контрол заново (даже если это будет медленнее).
Вопрос в том, позволит ли архитектура альфы работать без кеша, и не будет ли при этом жуткого моргания?
Насчет Process Explorer – Вы какой параметр смотрели ? Private Bytes показывает реальное количество занимаемой памяти.
alex000Participant'Feg16' wrote:Довольно давно заметил, что при сборке проекта в него включаются такие бинарники как
А что вас в этом смущает?
'Feg16' wrote:9-12: для чего они собираются в проекте, если я не использую ни калькулятор, ни календарь?
Далее, зачем в проект включаются строковые ресурсы 3682..3688. Я не использую ни фрейм-адаптеры, ни диалоги, ни другое, что есть в этих ресурсах.
Можно как-то управлять подключением всех этих ресурсов? http://www.alphaskins.com/forum/public/style_emoticons/default/ph34r.gif
Если не ошибаюсь, линкер подключает всю библиотеку, даже если из нее используется только один модуль. Единственный вариант управлять этим – делать отдельные пакеты и подключать только нужные (что правда сильно осложняет установку), как сделано например в FastReport. ИМХО, в случае альфы это неоправданно.
Все таки, к чему такие вопросы? Волнует размер exe?
'Feg16' wrote:Далее еще вопрос. Почему при использовании альфаскинов, легкий проект при первоначальном запуске кушает аж 17 метров памяти, при 6 метрах с выключенными скинами?
Дело в том, что обычные, не зашкуренные приложения еще со времен первых версий Windows, для перерисовки своего содержимого – тупо рисуют это содержимое каждый раз заново – это относительно быстро и экономит память. Но альфа не может себе позволить такой способ – были бы адские тормоза и моргание при каждой перерисовке каждого градиента итд итп
Поэтому, альфа отрисовывает свои контролы в кеш, а потом уже выводит его на экран. Это радикально ускоряет прорисовку и устраняет моргание, но кеш – битмапы – занимают память, причем не мало – битмап размером в весь экран у меня весит около 4 мб.
С этим – ничего не поделать 🙁
'Feg16' wrote:Однако если открытый проект свернуть, а потом развернуть – то с 17 метров резко упадет до 10 метров и более не будет подниматься. Эт шо за чудеса?
Эти чудеса называются штатный диспетчер задач – он не учитывает страницы памяти которые попали в своп, а при сворачивании программы винда скидывает все что можно в своп. Типа, раз свернул, значит больше этой проге память не нужна 🙂
Используйте ProcessExplorer, там таких фокусов нет.
alex000Participant'Support' wrote:В следующей версии Items тоже будут заполняться.
Спасибо :a3:
В AlphaControls v7.34 – все в порядке.
alex000Participantсм. свойство формы Constraints
alex000ParticipantЭто из этой темы что-ли?
Можно было и ссылку дать, а то пришлось искать.
Черт. Это же тема почти пятилетней давности! 😮
Скорее всего, данный там объектник не пойдет под delphi 7 – он собран под более новым delphi.
Альфа последних версий почти нормально скинит этот самый диалог поиска. “Почти” – это TDBCheckBoxEh – с ним остались проблемы которые вряд ли удастся решить, т.к. TDBCheckBoxEh не является наследником TCheckBox.
Я мог бы выложить исходник DBGridEhFindDlgsMy.pas, но опасаюсь нарушить копирайты – все-таки, это всего лишь модификация оригинального модуля EhLib.
Могу посоветовать Вам самим проделать “скинирование”, это совсем не сложно:
1) Скопировать к себе и переименовать DBGridEhFindDlgs.pas и DBGridEhFindDlgs.dfm
2) Заменить TDBCheckBoxEh на TsCheckBox
В старой теме есть чуть более подробная инструкция.
alex000ParticipantГлюк компилятора в том что это “machine generated header”:
Code:// Borland C++ Builder
// Copyright (c) 1995, 2005 by Borland Software Corporation
// All rights reserved// (DO NOT EDIT: machine generated header) 'Sskinprovider.pas' rev: 10.00
Автор AlphaControls тут как-бы не причем – этот файл создает компилятор Delphi. Причем компиляторы последних версий Delphi, похоже лишены этого недостатка.
Есть идеи как это исправить ? (кроме идеи вручную каждый раз исправлять hpp)
alex000ParticipantВообще-то это известный косяк всех не-unicode программ.
Windows определяет кодировку текста по выбранной в момент копирования раскладке клавиатуры.
В моем случае это воспроизводится так:
1 – В TMemo ввести текст на русском
2 – переключить раскладку на LV (скорее всего подойдет любая не русская и не английская раскладка)
3 – скопировать текст
4 – вставить в любую unicode-программу (вроде блокнота)
В любом случае – альфа тут не причем.
alex000Participant1) Если не ошибаюсь – с обычным TComboBox та же история. На форуме это несколько раз обсуждалось, можно поискать.
Могу посоветовать помучить свойства Constraints->MinHeight, и возможно событие OnMeasureItem.
2) Для TsLabel и остальных компонентов альфы предусмотрено свойство SkinData->CustomColor.
С обычным контролами вроде TLabel это не пройдет 🙁
Могу посоветовать поставить им Tag = -98
Тогда они будут исключены из обработки альфой, и сохранят заданный цвет.
alex000ParticipantВсе намного проще – http://www.sql.ru/forum/actualthread.aspx?tid=693708
В двух словах – это баг VCL, который проявляется при условии WindowState = wsMaximized и Position = poScreenCenter
.dfm
Code:object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 198
ClientWidth = 381
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
KeyPreview = True
OldCreateOrder = False
Position = poScreenCenter
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
end.pas
Code:unit Unit1;
interface
uses Windows, Classes, Graphics, Forms, StdCtrls, Controls;type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
public
end;
var
Form1: TForm1;implementation
uses Unit2;{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Position := poDesigned; // раскомментируте эту строчку – и все бует OK 🙂
end;procedure TForm1.FormShow(Sender: TObject);
begin
WindowState := wsMaximized;
end;end.
alex000ParticipantВ версии 7.29 все нормально. Спасибо!
alex000ParticipantДа, спасибо, сейчас нормально, не падает.
Мне наверно стоило сразу выложить пример на Delphi:
Code:// вставить – перед строчкой Application.Initialize;
// на форме – sSkinManager1 и sSkinProvider1
Form1 := TForm1.Create(Application);
Form1.Show();
Form1.Update();while not Application.Terminated and Assigned(Form1) and Form1.Visible do
Application.HandleMessage();
// … проверка авторизации, не прошел – ExitProcess(0);
Form1.Free();В любом случае, еще раз спасибо, вопрос закрыт.
alex000ParticipantСпасибо! Теперь, в v7.29 все нормально.
alex000ParticipantСтранно это – по идее без acntBCB6_R.bpl или acntBCB6_R.lib ничего работать не будет..
Может быть случайно вместо Compile была попытка сделать Build ?
И почему с предыдущей версией все работало ? Может быть остались “следы” от старой версии ?
В любом случае – раз все заработало – мои вопросы считать риторическими 🙂
alex000ParticipantЧесно говоря, не знаю в чем косяк, но могу посоветовать заглянуть в соседнюю тему о BCB2006 – http://www.alphaskins.com/forum/index.php?showtopic=1293&view=findpost&p=18483
Там как раз есть инструкция для такого случая, для BCB6 тоже должно помочь.
alex000ParticipantНет, в v7.27 оно по-прежнему..
Демка – создать новый проект в С++ Builder, и в Project1.cpp дописать:
Code://—————————————————————————
#include
#pragma hdrstop
//—————————————————————————
USEFORM(“Unit1.cpp”, Form1);
//—————————————————————————
#include “Unit1.h”
//—————————————————————————
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// на форме – sSkinManager1 и sSkinProvider1
Form1 = new TForm1(Application);
Form1->Show();
Form1->Update();while ((!Application->Terminated)&&(Form1)&&(Form1->Visible))
Application->HandleMessage();
// … проверка авторизации, не прошел – ExitProcess(0);
Form1->Free();// .. итд
Application->Initialize();
…Думаю, под делфи эта же идея тоже сработает.
Если такую форму свернуть – кликом по значку проги на таск-баре – получаем AV.
Подозреваю, что причина AV в том что Application->MainForm = NULL
alex000ParticipantЕсли срочно – анимацию сворачивания ведь можно отключить – SkinManager.AnimEffects.Minimizing.Active = false
alex000ParticipantНедавно словил очень похожий глюк, но в демке тоже повторить не получилось..
Так что присоединяюсь к ожиданию результатов анализа 🙂
Если понадобится – могу еще раз попытаться сделать демку.
-
AuthorPosts