Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Как изменить вид стандартного TSaveDialog?   Найти похожие ветки 

 
JC ©   (2002-05-04 13:14) [0]

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


 
cok ©   (2002-05-04 14:02) [1]

Попробуй создать компонент, родителем которого будет TSaveDialog.


 
JC ©   (2002-05-04 14:30) [2]

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


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

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


 
JC ©   (2002-05-04 21:07) [4]

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


 
Yuriy ©   (2002-05-05 00:00) [5]

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


 
Suntechnic ©   (2002-05-05 03:36) [6]

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

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


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

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


 
Suntechnic ©   (2002-05-07 15:50) [8]

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


 
JC ©   (2002-05-07 20:33) [9]

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


 
Suntechnic ©   (2002-05-08 02:13) [10]

Файл DialogExUnit.h

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <FileCtrl.hpp>
#include <ExtCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
//---------------------------------------------------------------------------
#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 <vcl.h>
#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();
}//---------------------------------------------------------------------------



 
Suntechnic ©   (2002-05-08 02:20) [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:24) [12]

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


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

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


 
JC ©   (2002-05-09 13:07) [14]

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


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

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


 
JC ©   (2002-05-09 15:57) [16]

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


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

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


 
JC ©   (2002-05-10 13:41) [18]

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


 
JC ©   (2002-05-11 17:56) [19]

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


 
Suntechnic ©   (2002-05-11 19:32) [20]

Добавляй значения вот в этом месте и всё будет в порядке:
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-12 00:13) [21]

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



Страницы: 1 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.024 c
1-47548
Skier
2002-06-26 13:18
2002.07.15
Динамическое создание строк


14-47699
mph
2002-06-15 14:08
2002.07.15
многопроцессорные системы


1-47283
Floyd
2002-06-30 11:43
2002.07.15
ListBox


4-47903
Rival
2002-05-13 15:13
2002.07.15
Как легко поместить иконку в трэй и вызывать из


1-47421
spacerex
2002-06-27 17:15
2002.07.15
наследник от TPanel с onmouseleave