Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TPageControl меня убивает...

299
01 сентября 2005 года
3D Bob
885 / / 18.04.2005
Есть класс..
Код:
class TMyPage : private TTabSheet{
private:
        int TYPE;
        void __stdcall SetType(int);
        void __fastcall OnDClickUserList(TObject * Sender);
public:

        __fastcall TMyPage(TPageControl *);
        __fastcall ~TMyPage();
        TMemo * MainMemo;
        TListView * UserList;
        __property int Type = {read=TYPE, write=SetType};
        __property Caption;
};
//----------------------
__fastcall TMyPage::TMyPage(TPageControl * PageWindow)
:TTabSheet(PageWindow)
{
        this->PageControl =  PageWindow;
        this->Ctl3D = false;
}
//--------------------------

void __stdcall TMyPage::SetType(int Type){
        TYPE = Type;
        this->MainMemo = new TMemo(this);
        this->MainMemo->Parent = this;
        this->MainMemo->Visible = true;
        this->MainMemo->Align = alClient;
        this->MainMemo->Font->Size = -13;
        this->MainMemo->Font->Name = "Verdana";
        this->MainMemo->ReadOnly = true;
        this->MainMemo->Ctl3D = false;

        if (Type==1){
                UserList = new TListView(this);
                UserList->Parent = this;
                UserList->Align = alRight;
                UserList->Font->Size = -13;
                UserList->Font->Name = "Verdana";
                UserList->OnDblClick = this->OnDClickUserList;
                UserList->SmallImages = FormMain->ImageList;
                UserList->ViewStyle = vsList;
                UserList->Ctl3D = false;
        }
}

И есть код
 
Код:
TMyPage * Page = new TMyPage(PageWindow);
        Page->Caption = "Ãëàâíîå òåêñòîâîå îêíî";
        Page->Type = 1;
        PageList->Add(Page);
                Page->MainMemo->Lines->Add("SSSSSSSSSSSSSSSSSSSSS");    
[color=red]// Если это выполнить то происходит п-ц .
Кароче ругается на неизвестнй дискриптор окна...[/color]
259
01 сентября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by 3D Bob
Есть класс..
Код:
class TMyPage : private TTabSheet{
private:
        int TYPE;
        void __stdcall SetType(int);
        void __fastcall OnDClickUserList(TObject * Sender);
public:

        __fastcall TMyPage(TPageControl *);
        __fastcall ~TMyPage();
        TMemo * MainMemo;
        TListView * UserList;
        __property int Type = {read=TYPE, write=SetType};
        __property Caption;
};
//----------------------
__fastcall TMyPage::TMyPage(TPageControl * PageWindow)
:TTabSheet(PageWindow)
{
        this->PageControl =  PageWindow;
        this->Ctl3D = false;
}
//--------------------------

void __stdcall TMyPage::SetType(int Type){
        TYPE = Type;
        this->MainMemo = new TMemo(this);
        this->MainMemo->Parent = this;
        this->MainMemo->Visible = true;
        this->MainMemo->Align = alClient;
        this->MainMemo->Font->Size = -13;
        this->MainMemo->Font->Name = "Verdana";
        this->MainMemo->ReadOnly = true;
        this->MainMemo->Ctl3D = false;

        if (Type==1){
                UserList = new TListView(this);
                UserList->Parent = this;
                UserList->Align = alRight;
                UserList->Font->Size = -13;
                UserList->Font->Name = "Verdana";
                UserList->OnDblClick = this->OnDClickUserList;
                UserList->SmallImages = FormMain->ImageList;
                UserList->ViewStyle = vsList;
                UserList->Ctl3D = false;
        }
}

И есть код
 
Код:
TMyPage * Page = new TMyPage(PageWindow);
        Page->Caption = "Ãëàâíîå òåêñòîâîå îêíî";
        Page->Type = 1;
        PageList->Add(Page);
                Page->MainMemo->Lines->Add("SSSSSSSSSSSSSSSSSSSSS");    
[color=red]// Если это выполнить то происходит п-ц .
Кароче ругается на неизвестнй дискриптор окна...[/color]


Дак нема у тебя ничого еще в MainMemo. Сделай MainMemo = new TMemo в конструкторе.

299
01 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by AlexandrVSmirno
Дак нема у тебя ничого еще в MainMemo. Сделай MainMemo = new TMemo в конструкторе.



Да есть он...!!!!
Он создается в когда присваиваться тип.
В конструкторе я его делать не собираюсь, так как от типа зависить будет создоваться ему или нет.

Глянь на SetType

Объекты создаются и страничка тоже, то есть визуально они видны. если открыть нужную страницу.
НО, как только я начию работать с этими обектами. ТО происходит ошибка.

Я же сказал ругается на неизвестный дескриптор окна, а не на ошибку в памяти.

259
01 сентября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by 3D Bob
Да есть он...!!!!
Он создается в когда присваиваться тип.
В конструкторе я его делать не собираюсь, так как от типа зависить будет создоваться ему или нет.

Глянь на SetType

Объекты создаются и страничка тоже, то есть визуально они видны. если открыть нужную страницу.
НО, как только я начию работать с этими обектами. ТО происходит ошибка.

Я же сказал ругается на неизвестный дескриптор окна, а не на ошибку в памяти.


Так у тебя это своя компонента что ли?

299
01 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by AlexandrVSmirno
Так у тебя это своя компонента что ли?


Что-то типо....
Только родителем я взял TTabSheet, чтобы можно было свой компонент сделать Страницей TPageControl

259
01 сентября 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by 3D Bob
Что-то типо....
Только родителем я взял TTabSheet, чтобы можно было свой компонент сделать Страницей TPageControl


Тогда подумать надо. Навскидку вроде все ок.

299
01 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by AlexandrVSmirno
Тогда подумать надо. Навскидку вроде все ок.


Не на чем думать.... Может не нравица что я свой компонент делаю страницей, но я тогда пробовал не создовать родителя, а добавить в класс объект TTabSheet тоже самое(((((
Начинаю задумываться что VCL опять начинает глючить......, и с каждым днем всен больше и больше сколоняюсь к написаню программ на АПИ... Но время, времени у меня не так много:(


Блин((( Вообще вопрос отпал... Сделал это в отдельном проекте и все заработало. А в своем где еще помиао этого, куча другого кода, работать не желает, и я понять не могу почему:%((((((((((((((((((((((((((((((((((

Выкладывать другую кучу кода считаю не рациональным. Пол дня уйдет разбирать его кому-то... Буду ночь не спать сегодня...
Всем спасибо.

299
02 сентября 2005 года
3D Bob
885 / / 18.04.2005
Кароче в п***у этот PageContol
Есть на Апи нечто похожее?
406
02 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by 3D Bob
Кароче в п***у этот PageContol
Есть на Апи нечто похожее?



На апи можно попробовать ф-ю PropertySheet
или
hwndTab = CreateWindow(
WC_TABCONTROL, "",
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
0, 0, rcClient.right, rcClient.bottom,
hwndParent, NULL, g_hinst, NULL
);

246
03 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by 3D Bob
Да есть он...!!!!
Он создается в когда присваиваться тип.
В конструкторе я его делать не собираюсь, так как от типа зависить будет создоваться ему или нет.

Глянь на SetType


Глядим, от типа создание Мемо никак не зависит - ОН СОЗДАЕТСЯ ВСЕГДА и растягивается на сраницу, а в случае type == 1 создается еще и ListView и тоже растягивается на страницу? Тупость по моему.
Если так писать. то извини вряд-ли что заработает.

246
03 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by GIZMO
Глядим, от типа создание Мемо никак не зависит - ОН СОЗДАЕТСЯ ВСЕГДА и растягивается на сраницу, а в случае type == 1 создается еще и ListView и тоже растягивается на страницу? Тупость по моему.
Если так писать. то извини вряд-ли что заработает.


Туда же - а зачем писать this->MainMemo он и так в области видимости класса?

299
03 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by GIZMO
Глядим, от типа создание Мемо никак не зависит - ОН СОЗДАЕТСЯ ВСЕГДА и растягивается на сраницу, а в случае type == 1 создается еще и ListView и тоже растягивается на страницу? Тупость по моему.
Если так писать. то извини вряд-ли что заработает.



Скажем так, это не весь код.
Он только для примера, в данном случае от типа не зависит.
Но в дальнейшем будет зависить. ОН СОЗДАЕТСЯ ВСЕГДА это мой код. Я ЗНАЮ ЧТО СОЗДАЕТСЯ ВСЕГДА А ЧТО НЕТ.
Я часть отбросил для удобочитаемости.
ListView растягивается только по правому краю. Если не знаешь зачем так, НЕХЕР НАЗЫВАТЬ ЭТО ТУПОСТЬ.

299
03 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by GIZMO
Туда же - а зачем писать this->MainMemo он и так в области видимости класса?



Это МОЙ стиль программировния, всегда указывать нужную видимость. По умолчанию, поиск сначало идет в текущей функции а помто в текущем классе. Я же сразу заставляю его искать в классе.

246
03 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by 3D Bob
Я часть отбросил для удобочитаемости.


Думаешь если написать тупость, то будет удобней читать?

299
03 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by GIZMO
Думаешь если написать тупость, то будет удобней читать?


Кому как;)

10
03 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by 3D Bob
Кому как;)


Green, ау! 8)

299
03 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Freeman
Green, ау! 8)


Стукач. Да и вообще я не понел к чему придераться?
Вопрос был не конкретно в ТМемо
а в том что как только начинаю работать с внутренними элементами то п-ц...

10
03 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by 3D Bob
а в том что как только начинаю работать с внутренними элементами то п-ц...


А что такое PageList? Сдается мне, ошибка происходит из-за отсутствия Parent-а у наследника TTabSheet.

299
03 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Freeman
А что такое PageList? Сдается мне, ошибка происходит из-за отсутствия Parent-а у наследника TTabSheet.


Парент есть, все таки я не такой ламер))))
нет, с этим все впорядке.
PageList это TList *
А парент PageControl создается на этапе визуального проектирования.
Ошибка происходит когда обращаюсь через PageList
Например

((TMyPage *)PageList->Items[0])->MainMemo->Add(...);

10
03 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by 3D Bob
Ошибка происходит когда обращаюсь через PageList


Значит, так. Компилишь с отладочными версиями модулей VCL, находишь место, в VCL-ных исходниках, где конкретно возникает ошибка.

10
04 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by 3D Bob
 
Код:
this->MainMemo->Font->Size = -13;


Блин, только сейчас совершенно случайно заметил. А ты уверен, что отрицательными значениями задается именно размер (Size), а не высота (Height) шрифта?

299
04 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Freeman
Блин, только сейчас совершенно случайно заметил. А ты уверен, что отрицательными значениями задается именно размер (Size), а не высота (Height) шрифта?



От сайза не зависит.
Так как первая страница создается нормально.
Есть еще одна мысль... Создание, и обращение к второй, третьей... страницам происходят в отдельных потоках.
Когда-то читал у Рихтера что использовать CreateThread не рекомендуется. Ну пока не дочитал до конца почему.

10
04 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by 3D Bob
Есть еще одна мысль... Создание, и обращение к второй, третьей... страницам происходят в отдельных потоках.


У-у-у! А хелпашник Борланда не читал по теме? Для обращения к компонентам VCL из потоков надо создавать отдельные функции и вызывать их посредством метода TThread::Syncronize().

299
04 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Freeman
У-у-у! А хелпашник Борланда не читал по теме? Для обращения к компонентам VCL из потоков надо создавать отдельные функции и вызывать их посредством метода TThread::Syncronize().


Спасибо. Скорее всего из-за этого. Буду изучать Класс TThread
Хотя, я стараюсь максимально уходить от VCL по возможности и стараюсь максимум из того что пишу писать на Апи. Так например я давно отказался от ShowMessage и Application->MessageBoxA();
И теперь использую только MessageBoxW();
Сразу юникодную, так как дядя Рихтер сказал, что рано или поздно, виндоус все передает только юникодной функции. А все остальные существуют для совместимости.

362
04 сентября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by 3D Bob
По умолчанию, поиск сначало идет в текущей функции а помто в текущем классе. Я же сразу заставляю его искать в классе.



А таким образом ты пытаешься уменьшить время компиляции или время выполнения?

Цитата:
И теперь использую только MessageBoxW(); Сразу юникодную, ... все остальные существуют для совместимости.



Это из той же области - какую функцию вызывать определяется на этапе обработки кода препроцессором - MessageBox это всего лишь макро, а не функция. Так что прямое написание MessageBoxW никак не влияет на скорость выполнения программы.

299
04 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by _kolyan
А таким образом ты пытаешься уменьшить время компиляции или время выполнения?



Это из той же области - какую функцию вызывать определяется на этапе обработки кода препроцессором - MessageBox это всего лишь макро, а не функция. Так что прямое написание MessageBoxW никак не влияет на скорость выполнения программы.




Знаю и знаю. Знаю что уменьшаю время поиска только во время компиляции. Но я так привык уже.

MessageBox по умочалнию компилируеца в MessageBoxA
если не выставлять константу
#define UNICODE
Я её не выставляю. Еще есть то что я использую в качестве анси.
Так что компилятор всегда конечные функции делает ANSI и когда программа их вызывает, уже сама виндоус переводит их в MessageBoxW.
Так что тем самым я действительно ускоряю процесс выполнения программы.

585
09 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by 3D Bob
Знаю и знаю. Знаю что уменьшаю время поиска только во время компиляции. Но я так привык уже.

MessageBox по умочалнию компилируеца в MessageBoxA
если не выставлять константу
#define UNICODE
Я её не выставляю. Еще есть то что я использую в качестве анси.
Так что компилятор всегда конечные функции делает ANSI и когда программа их вызывает, уже сама виндоус переводит их в MessageBoxW.
Так что тем самым я действительно ускоряю процесс выполнения программы.


Позволь отметить, что вышеописаным методом процесс выполнения программы ускорить невозможно. Объясняю, так можно ускорить лишь процесс компиляции, да и то не особо.

299
09 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by honeybeer
Позволь отметить, что вышеописаным методом процесс выполнения программы ускорить невозможно. Объясняю, так можно ускорить лишь процесс компиляции, да и то не особо.


Итак компиляция прошла.
Программа вызывает MessageBoxA по умолчанию.
Винда, принимает вызов, переделывает ANSI в UNICODE
и вызывает MessageBoxW.
В итоге если вызывать сразу MessageBoxW промежуточые операции опускаются.
Рихтер(с)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог