![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменить вид стандартного TSaveDialog? [D5, D6, Win95/98]
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]А как его потом изменить и в какой функции?