home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 September
/
VPR9809B.ISO
/
APUPDATE
/
VC
/
Tx300d
/
TX300D.LZH
/
EVENT.C
< prev
next >
Wrap
Text File
|
1997-06-16
|
9KB
|
361 lines
// イベントマクロ
//2.90 で追加
#include <windows.h>
#ifndef __FLAT__
extern "shell.dll" {
#include <shellapi.h>
}
#endif
#ifdef __FLAT__
// WZ Maileditor event
//2.98 970311 全面変更
//2.90 ここではダイアログボックスなどのUIはできません。
void at_ehInit(TX* text)
{
if (text->ehHwnd) {
if (!text->mail) {
text->mail = malloc(sizeof(MAIL));
if (text->mail) memset(text->mail,0,sizeof(MAIL));
}
if (!text->ehHwndBase) {
HWND hwndBase = text->ehHwnd;
while(1) {
hwndBase = GetParent(hwndBase);
if (hwndBase) {
DWORD style = GetWindowLong(hwndBase,GWL_STYLE);
if ((style & WS_POPUP) || (style & WS_CAPTION)) {
mchar buff[CCHPATHNAME];
GetWindowText(hwndBase,buff,cchof(buff));
if (buff[0]) {// キャプションが実際にあるか調べる
text->ehHwndBase = hwndBase;
break;
}
}
} else {
break;
}
}
}
if (text->mail) {
if (text->ehHwndBase) {
GetWindowText(text->ehHwndBase,text->mail->szCaptionOriginal,cchof(text->mail->szCaptionOriginal));
sstrcpy(text->mail->szCaption,text->mail->szCaptionOriginal);
//
txstr sz = text->mail->szCaptionOriginal;
sz += "(WZで編集中)";
SetWindowText(text->ehHwndBase,sz);
}
}
}
}
//2.90 ここではダイアログボックスなどのUIはできません。
void at_ehTerm(TX* text)
{
if (text->ehHwnd) {
EnableWindow(text->ehHwnd,TRUE);
if (text->ehHwndBase) {
EnableWindow(text->ehHwndBase,TRUE);
if (text->mail) {
SetWindowText(text->ehHwndBase,text->mail->szCaptionOriginal);
}
text->ehHwndBase = NULL;
}
text->ehHwnd = NULL;
text->share->neh--;
if (text->mail) {
free(text->mail);
text->mail = NULL;
}
}
}
#endif
void at_open(TX* text)
{
}
extern "html" BOOL TXAPI TXCMD uiNewPage(TX* text);
void at_htmlnew(TX* text)
{
//2.99C 970326
uiNewPage(text);
}
//## html browser dde
// thanks taniyamaさん
//2.99C 970326 new
#include "ddewz.h"
#include "ddewz.h"
#import "shellapi"
LPCSTR pNnService = "Netscape";
LPCSTR pIeService = "IExplore";
LPCSTR pTopic = "WWW_OpenURL";
static BOOL ddeConnectBrowser(void)
{
#if 1
if (ddeConnect(pNnService,pTopic)) return TRUE;// はじめNN
if (ddeConnect(pIeService,pTopic)) return TRUE;// つぎIE
return FALSE;
#else
// レジストリで指定されてる方が優先みたいで、以下はだめだった
switch(text->share->config.modeHtml) {
case HTML_IE: {
return ddeConnect(pIeService,pTopic);
}
case HTML_NN: return ddeConnect(pNnService,pTopic);
default: {
if (ddeConnect(pNnService,pTopic)) return TRUE;// はじめNN
if (ddeConnect(pIeService,pTopic)) return TRUE;// つぎIE
break;
}
}
return FALSE;
#endif
}
static BOOL htmlDdeView(mchar* szfilename)
{
// szfilenameにはファイル名かURLを指定できる
if (szfilename && szfilename[0]) {
if (ddeConnectBrowser()) {
mchar szUrl[CCHPATHNAME + 16];
if (pathGetMode(szfilename) == PATH_URL) {
sstrcpy(szUrl,szfilename);
} else {
sprintf(szUrl,"file:///%s",szfilename);
}
ddeExecute(szUrl);
ddeDisconnect();
} else {
shellExecute(szfilename,"open");
}
return TRUE;
}
return FALSE;
}
//## クリッカブルURL & E-mail
BOOL TXAPI openMail(TX* text,mchar* szMailAddress)
{
// メールアドレスszMailAddressのオープン処理をここに記述。
//2.90
ShellExecute(text->hwndbase,"open","mailto:" + szMailAddress,NULL,NULL,SW_SHOWNORMAL);
return TRUE;
}
BOOL TXAPI openURL(TX* text,mchar* szURL)
{
// URL(szURL)のオープン処理をここに記述。
//2.90
#if 1//2.99C 970326 DDEで開くようにした。szURLにファイル名も指定できる。
return htmlDdeView(szURL);
#else
ShellExecute(text->hwndbase,"open",szURL,NULL,NULL,SW_SHOWNORMAL);
return TRUE;
#endif
}
//##ファイルプレビュー
//2.99 970318
static mchar _szcfgBinary[] = "バイナリファイル";
static mchar _szMsGossick[] = "MS ゴシック";
permanent int p_lfHeight = 9;
permanent BOOL p_AutoWidth = FALSE;
static void txSetFontstyleText(TX* text,mchar* lfFaceName,int lfHeight)
{
FONTSTYLE* fs = &text->tFontstyle[FONTTX_TEXT];
strcpy(fs->tlfFaceName[IFONT_STD],lfFaceName);
strcpy(fs->tlfFaceName[IFONT_ANK],lfFaceName);
fs->tlfHeight[IFONT_STD] = lfHeight;
fs->tlfHeight[IFONT_ANK] = lfHeight;
}
static void txSetConfigPreview(TX* text)
{
txSetFontstyleText(text,_szMsGossick,p_lfHeight);
text->fSetWidthByWindow = p_AutoWidth;
text->fSilent = TRUE; // 不要なattentionを出さない
text->fTxsemNoUI = TRUE;//2.98 970304 HTMLのファイルオープンプレビューで体裁の変化確認ダイアログが出ることがあった
sstrcpy(text->szMenuMouseR,"右クリック_ファイルプレビュー");
}
void at_pf(HWND hctrl,mchar* szfilename,int mode)
{
// szfilename: NULLの場合あり
//2.99 970318
if (hctrl) {
TX* text = (LPVOID)SendMessage(hctrl,TXWM_GETTX,0,0);
if (text) {
if (!text->share->config.fFilePreview) {//2.99D 970402
return;
}
BOOL fBinary = FALSE;
BOOL fFD = FALSE;//3.00A3 970508
txClose(text);
//if (szfilename) information(szfilename);
#if 1//2.99B 970322 ルードディレクトリでディレクトリを選択するとエラーが出た
if (
szfilename && pathIsFileName(szfilename) &&
!pathIsExt(szfilename,".lnk")//2.99I 970405 WZ32だとLNKファイルを解決してファイルプレビューしようとしていて、「オープンできません」と出ることがあった
) {
mchar szGroup[CCHWORD];
if (
szfilename &&
pathGetExtGroup(pathGetExt(szfilename),szGroup) &&
!stricmp(szGroup,_szcfgBinary)
) {
//2.98 970308 バイナリファイルはファイルプレビューしない
fBinary = TRUE;
txSetFileName(text,NULL);
} else if (pathGetDriveType(szfilename) == DRIVE_REMOVABLE) {
//3.00A3 970508 FD,MOではファイルプレビューしないようにした
fFD = TRUE;
txSetFileName(text,NULL);
} else {
txSetFileName(text,szfilename);
}
} else {
//2.97A 970303
txSetFileName(text,NULL);
}
#else
if (
szfilename && (
pathIsWild(szfilename) ||
pathIsDirectory(szfilename) //2.99 970319
)
) {
//2.97A 970303
txSetFileName(text,NULL);
} else {
mchar szGroup[CCHWORD];
if (
szfilename &&
pathGetExtGroup(pathGetExt(szfilename),szGroup) &&
!stricmp(szGroup,_szcfgBinary)
) {
//2.98 970308 バイナリファイルはファイルプレビューしない
fBinary = TRUE;
txSetFileName(text,NULL);
} else {
txSetFileName(text,szfilename);
}
}
#endif
//
txSetConfigPreview(text);
text->sizefileMax = 16384;//2.99 970318 プレビューのサイズを制限した
text->fReadOnly = TRUE;//2.99 970318 リードオンリーとした
text->fKcAuto = text->share->config.fKcAuto;//3.00B1 970612 ファイルプレビューでもconfig.fKcAutoを参照
text->fSpaceLeft = text1->fSpaceLeft;//3.00B2 970616
//
txOpenText(text);
if (fBinary) {
txInsert(text,"(バイナリファイルなので内容省略)");
} else if (fFD) {
txInsert(text,"(フロッピー,MOのファイルなので高速化のため、内容省略)");
}
}
}
}
pf_fontToBig
{
p_lfHeight++;
txSetFontstyleText(text,_szMsGossick,p_lfHeight);
txFlush(text);
}
pf_fontToSmall
{
if (p_lfHeight > 3) {
p_lfHeight--;
}
txSetFontstyleText(text,_szMsGossick,p_lfHeight);
txFlush(text);
}
pf_autoWidth
{
txConfigOp(text,TXCONFIGOP_EXTSETUPDISPSTYLE,0);
p_AutoWidth ^= 1;
text->fSetWidthByWindow = p_AutoWidth;
txFlush(text);
}
// ファイルの内容をすべて読み込む
pf_loadall
{
#if 1///3.00A 970501 ファイルプレビューで「ファイルの内容をすべて読み込む」を実行するとエラーになった
TX* text = textf; // txCloseでtextfが変化するので。
txstr szfilename = text->szfilename;
txClose(text);
txSetFileName(text,szfilename);
//
txSetConfigPreview(text);
text->sizefileMax = 0;
text->fReadOnly = FALSE;
//
txOpenText(text);
// textfをtextにセット
// textf = textとするよりも次の方が良いだろう
SetFocus(NULL);
SetFocus(text->hwndtext);
//
return TRUE;
#else
txstr szfilename = text->szfilename;
txClose(text);
txSetFileName(text,szfilename);
//
txSetConfigPreview(text);
text->sizefileMax = 0;
text->fReadOnly = FALSE;
//
txOpenText(text);
return TRUE;
#endif
}
// 上書き保存
pf_save
{
if (text->sizefileMax) {// ファイルプレビュー中なら...
information("プレビューのために、ファイルの内容が省略されていて、保存できません");
return FALSE;
} else {
return txuiSave(text);
}
}
WORD at_cmdcheck(WZCMD wzcmd)
{
mchar* szcmd = wzcmdToSzcmd(wzcmd);
if (!szcmd) return 0;
if (!stricmp(szcmd,"\m.pf_save")) {
if (text->sizefileMax) return MF_GRAYED;
if (text->szfilename[0] == 0) return MF_GRAYED;//3.00A3 970508
return 0;
} else if (!stricmp(szcmd,"\m.pf_loadall")) {
if (text->szfilename[0] == 0) return MF_GRAYED;//3.00A3 970508 Binary,FDでプレビューしてないときは、すべてロード不可。ファイル名がわからない
if (text->sizefileMax) return 0;
if (!text->sizefileMax) return MF_CHECKED;
} else if (!stricmp(szcmd,"\m.pf_autoWidth")) {
if (p_AutoWidth) return MF_CHECKED;
}
return 0;
}