Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить вид стандартного TSaveDialog? [D5, D6, Win95/98]


Страницы:   1 2

JC ©   (2002-05-04 13:14:00) 

Для примера: Corel (Draw, PhotoPaint), и компонент TSavePictureDialog.


JC   (2002-05-12 00:13:00) [1]

Огромное спасибо!


Suntechnic   (2002-05-11 19:32:00) [2]

Добавляй значения вот в этом месте и всё будет в порядке:
void __fastcall TOpenDialogEx::DoShow()
{
TRect PreviewRect, StaticRect;

//Set preview area to entire dialog
GetClientRect(Handle, &PreviewRect);
StaticRect= GetStaticRect();
// Move preview area to right of static area
PreviewRect.Left = StaticRect.Left + (StaticRect.Right - StaticRect.Left);
PreviewRect.Top=PreviewRect.Top+ 4;
panel->BoundsRect=PreviewRect;
panel->ParentWindow= Handle; // After this line ONLY!!!
//for example
combobox->Items->Add("First");
combobox->Items->Add("Second");

TOpenDialog::DoShow();
}


JC   (2002-05-11 17:56:00) [3]

Suntechnicнашел что-нибудь. Получется, что this-это TOpenDialogEx*, а Parent должен быть TWinControl*...


JC   (2002-05-10 13:41:00) [4]

panel->Parent=this- несоответствие типов(TWinControl нужно)


Suntechnic   (2002-05-09 17:25:00) [5]

Ну что-нибудь типа panel->Parent=this;попробуй написать. Если не разберёшься приду домой гляну. На работе нет времени...


JC   (2002-05-09 15:57:00) [6]

Какого? Если Form1, то Panel не видно?


Suntechnic   (2002-05-09 15:55:00) [7]

>JC © (09.05.02 13:07)
А Parent-a присвоить не пробовал? :)


JC   (2002-05-09 13:07:00) [8]

Suntechnic помледний завершающий вопрос, я создал ComboBox, но не могу присвоить элементы списка в нём, ругается, что у Panel нет Parent"a.


JC   (2002-05-09 00:04:00) [9]

Suntechnic ОГРОМНОЕ СПАСИБО, разобрался что и куда писать, (конечно пришлось выучить, ресурсы, которые я до этого не знал). Но всё резко прояснилось.


Suntechnic   (2002-05-08 02:24:00) [10]

Там в заголовочном файле убери ф-цию void __fastcall ReadDescription();. У меня просто не файлы в memo показывало, а чуть посложнее было, я лишнее убрал, чтоб идею показать и код не загромождать.


Suntechnic   (2002-05-08 02:20:00) [11]

Использовать так:

#include "DialogExUnit.h"
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
TOpenDialogEx * od=new TOpenDialogEx(this);
od->Filter="Text Files(*.txt)|*.txt";
if(od->Execute())
// do something
delete od;
}


И ещё. Если это сразу не заработает, найди в каталогах Билдера файл extdlgs.rc (насколько я помню он где-то в ...Source\Vcl валяется) и подключи его к проекту.


Suntechnic   (2002-05-08 02:13:00) [12]

Файл DialogExUnit.h

#include
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
#ifndef DialogExUnitH
#define DialogExUnitH
//---------------------------------------------------------------------------
class TOpenDialogEx : public TOpenDialog
{
public:
virtual __fastcall TOpenDialogEx(TComponent * Owner);
virtual __fastcall ~TOpenDialogEx();
virtual bool __fastcall Execute();
protected:
DYNAMIC void __fastcall DoShow();
DYNAMIC void __fastcall DoSelectionChange();
void __fastcall ReadDescription();
TPanel * panel;
TMemo * memo;
};
//---------------------------------------------------------------------------
#endif


Файл DialogExUnit.cpp

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "DialogExUnit.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TOpenDialogEx::TOpenDialogEx(TComponent * Owner) : TOpenDialog(Owner)
{
panel=new TPanel(this);
panel->Name="TextPanel";
panel->Caption="";
panel->SetBounds(204, 5, 169, 200);
panel->BevelOuter= bvNone;
panel->BorderWidth= 6;
panel->TabOrder= 1;
memo=new TMemo(panel);
memo->Parent=panel;
memo->Align=alClient;
memo->WordWrap=true;
memo->ReadOnly=true;
}
//---------------------------------------------------------------------------
__fastcall TOpenDialogEx::~TOpenDialogEx()
{
delete panel;
}
//---------------------------------------------------------------------------
void __fastcall TOpenDialogEx::DoShow()
{
TRect PreviewRect, StaticRect;

//Set preview area to entire dialog
GetClientRect(Handle, &PreviewRect);
StaticRect= GetStaticRect();
// Move preview area to right of static area
PreviewRect.Left = StaticRect.Left + (StaticRect.Right - StaticRect.Left);
PreviewRect.Top=PreviewRect.Top+ 4;
panel->BoundsRect=PreviewRect;
panel->ParentWindow= Handle;
TOpenDialog::DoShow();
}
//---------------------------------------------------------------------------
bool __fastcall TOpenDialogEx::Execute()
{
if( NewStyleControls && !Options.Contains(ofOldStyleDialog))
Template="DLGTEMPLATE";
else
Template=NULL;
return TOpenDialog::Execute();
}
//---------------------------------------------------------------------------
void __fastcall TOpenDialogEx::DoSelectionChange()
{
if(FileExists(FileName))
memo->Lines->LoadFromFile(FileName);
else
memo->Text="";
TOpenDialog::DoSelectionChange();
}//---------------------------------------------------------------------------


JC   (2002-05-07 20:33:00) [13]

Suntechnic Конечно, я сейчас этим и маюсь(C++Builder5), и если можно по подписывай хотя бы расширения файлов, заранее благодарен.


Suntechnic   (2002-05-07 15:50:00) [14]

>JC © (07.05.02 15:09)
Занимался. Только я на Билдере занимался. Если C++ устроит могу показать код добавления предварительного просмотра текстовых файлов.


JC   (2002-05-07 15:09:00) [15]

Suntechnic ты чем-либо таким занимался, если можно хоть пример не для компонета, а для программы.


Suntechnic   (2002-05-05 03:36:00) [16]

>JC © (04.05.02 21:07)
Что ты пытаешься повторить? Конечно она снаружи недоступна. Она ж protected. Надо написать свой класс, отнаследованный от TSaveDialog или от TOpenDialog (в зависимости от того, что надо), и его использовать.

>Yuriy © (05.05.02 00:00)
См. ответ JC ©-у.


Yuriy   (2002-05-05 00:00:00) [17]

Не совсем в тему.
Мне нужно дополнить OpenDialod окном просмотра - как бы это сделать? Не создавать же собственный компoнент с нуля....


JC   (2002-05-04 21:07:00) [18]

Открывал, там функция GetStaticRect(), пытаюсь повторить, пишет is not acessible(недостижим).


Suntechnic   (2002-05-04 19:32:00) [19]

Открой исходники TSavePictureDialog там всё просто и доступно.


JC   (2002-05-04 14:30:00) [20]

А как его потом изменить и в какой функции?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо