Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизКак изменить вид стандартного 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c