TPageControl меня убивает...
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;
}
}
И есть код
Page->Caption = "Ãëàâíîå òåêñòîâîå îêíî";
Page->Type = 1;
PageList->Add(Page);
Page->MainMemo->Lines->Add("SSSSSSSSSSSSSSSSSSSSS");
[color=red]// Если это выполнить то происходит п-ц .
Кароче ругается на неизвестнй дискриптор окна...[/color]
Есть класс..
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;
}
}
И есть код
Page->Caption = "Ãëàâíîå òåêñòîâîå îêíî";
Page->Type = 1;
PageList->Add(Page);
Page->MainMemo->Lines->Add("SSSSSSSSSSSSSSSSSSSSS");
[color=red]// Если это выполнить то происходит п-ц .
Кароче ругается на неизвестнй дискриптор окна...[/color]
Дак нема у тебя ничого еще в MainMemo. Сделай MainMemo = new TMemo в конструкторе.
Дак нема у тебя ничого еще в MainMemo. Сделай MainMemo = new TMemo в конструкторе.
Да есть он...!!!!
Он создается в когда присваиваться тип.
В конструкторе я его делать не собираюсь, так как от типа зависить будет создоваться ему или нет.
Глянь на SetType
Объекты создаются и страничка тоже, то есть визуально они видны. если открыть нужную страницу.
НО, как только я начию работать с этими обектами. ТО происходит ошибка.
Я же сказал ругается на неизвестный дескриптор окна, а не на ошибку в памяти.
Да есть он...!!!!
Он создается в когда присваиваться тип.
В конструкторе я его делать не собираюсь, так как от типа зависить будет создоваться ему или нет.
Глянь на SetType
Объекты создаются и страничка тоже, то есть визуально они видны. если открыть нужную страницу.
НО, как только я начию работать с этими обектами. ТО происходит ошибка.
Я же сказал ругается на неизвестный дескриптор окна, а не на ошибку в памяти.
Так у тебя это своя компонента что ли?
Так у тебя это своя компонента что ли?
Что-то типо....
Только родителем я взял TTabSheet, чтобы можно было свой компонент сделать Страницей TPageControl
Что-то типо....
Только родителем я взял TTabSheet, чтобы можно было свой компонент сделать Страницей TPageControl
Тогда подумать надо. Навскидку вроде все ок.
Тогда подумать надо. Навскидку вроде все ок.
Не на чем думать.... Может не нравица что я свой компонент делаю страницей, но я тогда пробовал не создовать родителя, а добавить в класс объект TTabSheet тоже самое(((((
Начинаю задумываться что VCL опять начинает глючить......, и с каждым днем всен больше и больше сколоняюсь к написаню программ на АПИ... Но время, времени у меня не так много:(
Блин((( Вообще вопрос отпал... Сделал это в отдельном проекте и все заработало. А в своем где еще помиао этого, куча другого кода, работать не желает, и я понять не могу почему:%((((((((((((((((((((((((((((((((((
Выкладывать другую кучу кода считаю не рациональным. Пол дня уйдет разбирать его кому-то... Буду ночь не спать сегодня...
Всем спасибо.
Есть на Апи нечто похожее?
Кароче в п***у этот PageContol
Есть на Апи нечто похожее?
На апи можно попробовать ф-ю PropertySheet
или
hwndTab = CreateWindow(
WC_TABCONTROL, "",
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
0, 0, rcClient.right, rcClient.bottom,
hwndParent, NULL, g_hinst, NULL
);
Да есть он...!!!!
Он создается в когда присваиваться тип.
В конструкторе я его делать не собираюсь, так как от типа зависить будет создоваться ему или нет.
Глянь на SetType
Глядим, от типа создание Мемо никак не зависит - ОН СОЗДАЕТСЯ ВСЕГДА и растягивается на сраницу, а в случае type == 1 создается еще и ListView и тоже растягивается на страницу? Тупость по моему.
Если так писать. то извини вряд-ли что заработает.
Глядим, от типа создание Мемо никак не зависит - ОН СОЗДАЕТСЯ ВСЕГДА и растягивается на сраницу, а в случае type == 1 создается еще и ListView и тоже растягивается на страницу? Тупость по моему.
Если так писать. то извини вряд-ли что заработает.
Туда же - а зачем писать this->MainMemo он и так в области видимости класса?
Глядим, от типа создание Мемо никак не зависит - ОН СОЗДАЕТСЯ ВСЕГДА и растягивается на сраницу, а в случае type == 1 создается еще и ListView и тоже растягивается на страницу? Тупость по моему.
Если так писать. то извини вряд-ли что заработает.
Скажем так, это не весь код.
Он только для примера, в данном случае от типа не зависит.
Но в дальнейшем будет зависить. ОН СОЗДАЕТСЯ ВСЕГДА это мой код. Я ЗНАЮ ЧТО СОЗДАЕТСЯ ВСЕГДА А ЧТО НЕТ.
Я часть отбросил для удобочитаемости.
ListView растягивается только по правому краю. Если не знаешь зачем так, НЕХЕР НАЗЫВАТЬ ЭТО ТУПОСТЬ.
Туда же - а зачем писать this->MainMemo он и так в области видимости класса?
Это МОЙ стиль программировния, всегда указывать нужную видимость. По умолчанию, поиск сначало идет в текущей функции а помто в текущем классе. Я же сразу заставляю его искать в классе.
Я часть отбросил для удобочитаемости.
Думаешь если написать тупость, то будет удобней читать?
Думаешь если написать тупость, то будет удобней читать?
Кому как;)
Кому как;)
Green, ау! 8)
Green, ау! 8)
Стукач. Да и вообще я не понел к чему придераться?
Вопрос был не конкретно в ТМемо
а в том что как только начинаю работать с внутренними элементами то п-ц...
а в том что как только начинаю работать с внутренними элементами то п-ц...
А что такое PageList? Сдается мне, ошибка происходит из-за отсутствия Parent-а у наследника TTabSheet.
А что такое PageList? Сдается мне, ошибка происходит из-за отсутствия Parent-а у наследника TTabSheet.
Парент есть, все таки я не такой ламер))))
нет, с этим все впорядке.
PageList это TList *
А парент PageControl создается на этапе визуального проектирования.
Ошибка происходит когда обращаюсь через PageList
Например
((TMyPage *)PageList->Items[0])->MainMemo->Add(...);
Ошибка происходит когда обращаюсь через PageList
Значит, так. Компилишь с отладочными версиями модулей VCL, находишь место, в VCL-ных исходниках, где конкретно возникает ошибка.
Блин, только сейчас совершенно случайно заметил. А ты уверен, что отрицательными значениями задается именно размер (Size), а не высота (Height) шрифта?
Блин, только сейчас совершенно случайно заметил. А ты уверен, что отрицательными значениями задается именно размер (Size), а не высота (Height) шрифта?
От сайза не зависит.
Так как первая страница создается нормально.
Есть еще одна мысль... Создание, и обращение к второй, третьей... страницам происходят в отдельных потоках.
Когда-то читал у Рихтера что использовать CreateThread не рекомендуется. Ну пока не дочитал до конца почему.
Есть еще одна мысль... Создание, и обращение к второй, третьей... страницам происходят в отдельных потоках.
У-у-у! А хелпашник Борланда не читал по теме? Для обращения к компонентам VCL из потоков надо создавать отдельные функции и вызывать их посредством метода TThread::Syncronize().
У-у-у! А хелпашник Борланда не читал по теме? Для обращения к компонентам VCL из потоков надо создавать отдельные функции и вызывать их посредством метода TThread::Syncronize().
Спасибо. Скорее всего из-за этого. Буду изучать Класс TThread
Хотя, я стараюсь максимально уходить от VCL по возможности и стараюсь максимум из того что пишу писать на Апи. Так например я давно отказался от ShowMessage и Application->MessageBoxA();
И теперь использую только MessageBoxW();
Сразу юникодную, так как дядя Рихтер сказал, что рано или поздно, виндоус все передает только юникодной функции. А все остальные существуют для совместимости.
По умолчанию, поиск сначало идет в текущей функции а помто в текущем классе. Я же сразу заставляю его искать в классе.
А таким образом ты пытаешься уменьшить время компиляции или время выполнения?
Это из той же области - какую функцию вызывать определяется на этапе обработки кода препроцессором - MessageBox это всего лишь макро, а не функция. Так что прямое написание MessageBoxW никак не влияет на скорость выполнения программы.
А таким образом ты пытаешься уменьшить время компиляции или время выполнения?
Это из той же области - какую функцию вызывать определяется на этапе обработки кода препроцессором - MessageBox это всего лишь макро, а не функция. Так что прямое написание MessageBoxW никак не влияет на скорость выполнения программы.
Знаю и знаю. Знаю что уменьшаю время поиска только во время компиляции. Но я так привык уже.
MessageBox по умочалнию компилируеца в MessageBoxA
если не выставлять константу
#define UNICODE
Я её не выставляю. Еще есть то что я использую в качестве анси.
Так что компилятор всегда конечные функции делает ANSI и когда программа их вызывает, уже сама виндоус переводит их в MessageBoxW.
Так что тем самым я действительно ускоряю процесс выполнения программы.
Знаю и знаю. Знаю что уменьшаю время поиска только во время компиляции. Но я так привык уже.
MessageBox по умочалнию компилируеца в MessageBoxA
если не выставлять константу
#define UNICODE
Я её не выставляю. Еще есть то что я использую в качестве анси.
Так что компилятор всегда конечные функции делает ANSI и когда программа их вызывает, уже сама виндоус переводит их в MessageBoxW.
Так что тем самым я действительно ускоряю процесс выполнения программы.
Позволь отметить, что вышеописаным методом процесс выполнения программы ускорить невозможно. Объясняю, так можно ускорить лишь процесс компиляции, да и то не особо.
Позволь отметить, что вышеописаным методом процесс выполнения программы ускорить невозможно. Объясняю, так можно ускорить лишь процесс компиляции, да и то не особо.
Итак компиляция прошла.
Программа вызывает MessageBoxA по умолчанию.
Винда, принимает вызов, переделывает ANSI в UNICODE
и вызывает MessageBoxW.
В итоге если вызывать сразу MessageBoxW промежуточые операции опускаются.
Рихтер(с)