请问在D3D下怎么使用WIN32控件

TakeEdge 2004-11-04 10:19:14
RT
...全文
49 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
CapBttn.zipCapBttn这个例程介绍如何在标题栏(Caption)上画按扭。Fully functionalSource: IncludedD4 D5 splasher.zipHow To Display Splash-images v.1.0 By UtilMind Solutions. 这些例程为Windows应用程序显示Splash-images。Fully functionalSource: IncludedD2 D3 D4childwnd.zipHow to load an MDI-Childfrom From External DLLBy Mario Taricco. 这个例子显示从外部DLL如何装载MDI-Childfrom。 Fully functionalSource: IncludedD3 D4 D5NeoWin.zipNeoPlanet Form介绍如何做电子日记本NeoPlanet似的界面。Fully functionalSource: IncludedCB4 CB5 Win95Menu.zipWin95Menu适用于:Delphi5评述:Win95菜单BitmapMenu.zipBitmapMenu适用于:Delphi5评述:生成图片菜单,就象WIN98的开始菜单一样colorform.zipcolorform适用于:Delphi5评述:一个很简单的程序,实现窗口的渐变FormatA.zipFormat适用于:Delphi5评述:调用格式化对话框GetTitlemsg.zipGetTitlemsg适用于:Delphi5评述:得到本窗口的标题栏信息Neoform.zipNeoform适用于:Delphi5评述:一个很漂亮的窗口演示,仿效了浏览器的风格ledak.zipLedakBy D. Ismaryono. 显示如何执行“爆炸”效果。Fully functional.Source: Included. D3 customiz.zipCustomize Toolbar DemoBy Peter Hellinger. 像Word或Excel一样的专业的应用程序让用户设计toolbars和让在运行时间建立新的toolbars。这通常做的ist少量定制对话框和拖动功能。 这个例程给你看如何在你的程序中得到这种简单的功能。需要Jordan RusselRussel的TToolbar97组成部分组件,版本1.75或者更高的。 Fully functionalSource: Included D4 D5
时分法,真正的三维编程,场景渲染 #pragma warning(disable: 4995) #include #include #include // Scenes 场景 #include "Scene.h" #include "StanfordBunnyScene.h" // Include nvstereo, but only for Dx10. #define NO_STEREO_D3D9 #include "nvstereo.h" // Text rendering ID3DX10Font* gFont10 = NULL; ID3DX10Sprite* gSprite10 = NULL; CDXUTTextHelper* gTxtHelper = NULL; // our global vector of all our scenes. // Make this global because it's easier to work with DXUT this way const int cNoActiveScene = -1; std::vector gScenes; int gActiveScene = cNoActiveScene; // A little UI stuff GUI图形用户界面 //CDXUTDialog这个类负责纪录一个对话框的所有属性以及它上面的所有控件信息 //CDXUTDialogResourceManager,这个类保存了所有注册过的对话框链表,以及这些对话框共享的资源 //CDXUTElement 这个类保存了需要渲染的元素信息,经常会在渲染函数中用到 //CGrowableArray< TYPE >类 可动态增长的链表类。 CDXUTDialogResourceManager gDialogResourceManager; CDXUTDialog gUI; // Our parameters for the stereo parameters texture.纹理立体参数 nv::stereo::ParamTextureManagerD3D10* gStereoTexMgr = NULL; ID3D10Texture2D* gStereoParamTexture = NULL; ID3D10ShaderResourceView* gStereoParamTextureRV = NULL; // Support going back and forth between fullscreen and windowed mode #define IDC_TOGGLEFULLSCREEN 1 #define IDC_MENU 2 // ------------------------------------------------------------------------------------------------ void ClearRenderTargets(ID3D10Device* d3d10) { // Clearing every frame is a good practice for SLI. By clearing surfaces, you indicate to the // driver that information from the previous frame is not needed by the other GPU(s) involved // in rendering. float ClearColor[4] = { 0.0, 0.0, 0.5, 0.0 }; ID3D10RenderTargetView* pRTV = DXUTGetD3D10RenderTargetView(); d3d10->ClearRenderTargetView(pRTV, ClearColor); ID3D10DepthStencilView* pDSV = DXUTGetD3D10DepthStencilView(); d3d10->ClearDepthStencilView(pDSV, D3D10_CLEAR_DEPTH, 1.0, 0); } // ------------------------------------------------------------------------------------------------ void RenderWorld(ID3D10Device* d3d10, double fTime, float fElapsedTime) { // Give the active scene a shot at rendering the world. gScenes[gActiveScene]->Render(d3d10); } // ------------------------------------------------------------------------------------------------ void RenderText() { // Render common text, then give the active scene a chance to display text information // about itself. gTxtHelper->Begin(); gTxtHelper->SetInsertionPos(8, 8); gTxtHelper->SetForegroundColor(D3DXCOLOR(1.0f, 1.0f, 0.0f, 1.0f)); gTxtHelper->DrawTextLine(L""); gTxtHelper->DrawTextLine(L""); gTxtHelper->DrawTextLine(L""); gTxtHelper->DrawTextLine(DXUTGetFrameStats(true)); gTxtHelper->DrawTextLine(DXUTGetDeviceStats()); bool stereoActive = gStereoTexMgr->IsStereoActive(); if (stereoActive) { gTxtHelper->DrawTextLine(L"Stereo Active"); } else { gTxtHelper->SetForegroundColor(D3DXCOLOR(1.0f, 0.2f, 0.2f, 1.0f)); gTxtHelper->DrawTextLine(L"Stereo is currently disabled--you should see no differences between techniques."); gTxtHelper->SetForegroundColor(D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f)); } gScenes[gActiveScene]->RenderText(gTxtHelper, stereoActive); gTxtHelper->End(); } // ------------------------------------------------------------------------------------------------ void RenderCursor(ID3D10Device* d3d10) { // Cursor rendering is handled by the active scene. // Cursors need a bit of stereo love, so the scenes handle that. gScenes[gActiveScene]->RenderCursor(d3d10); } // ------------------------------------------------------------------------------------------------ void RenderHUD(ID3D10Device* d3d10, double fTime, float fElapsedTime) { RenderText(); gUI.OnRender( fElapsedTime ); // Render the cursor last for the obvious reason that we want it to appear above everything // else RenderCursor(d3d10); } // ------------------------------------------------------------------------------------------------ HRESULT CreateStereoParamTextureAndView(ID3D10Device* d3d10) { // This function creates a texture that is suitable to be stereoized by the driver. // Note that the parameters primarily come from nvstereo.h using nv::stereo::ParamTextureManagerD3D10; HRESULT hr = D3D_OK; D3D10_TEXTURE2D_DESC desc; desc.Width = ParamTextureManagerD3D10::Parms::StereoTexWidth; desc.Height = ParamTextureManagerD3D10::Parms::StereoTexHeight; desc.MipLevels = 1; desc.ArraySize = 1; desc.Format = ParamTextureManagerD3D10::Parms::StereoTexFormat; desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; desc.Usage = D3D10_USAGE_DYNAMIC; desc.BindFlags = D3D10_BIND_SHADER_RESOURCE; desc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE; desc.MiscFlags = 0; V_RETURN(d3d10->CreateTexture2D(&desc;, NULL, &gStereoParamTexture;)); // Since we need to bind the texture to a shader input, we also need a resource view. D3D10_SHADER_RESOURCE_VIEW_DESC descRV; descRV.Format = desc.Format; descRV.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D; descRV.Texture2D.MipLevels = 1; descRV.Texture2D.MostDetailedMip = 0; descRV.Texture2DArray.MostDetailedMip = 0; descRV.Texture2DArray.MipLevels = 1; descRV.Texture2DArray.FirstArraySlice = 0; descRV.Texture2DArray.ArraySize = desc.ArraySize; V_RETURN(d3d10->CreateShaderResourceView(gStereoParamTexture, &descRV;, &gStereoParamTextureRV;)); return hr; } // ------------------------------------------------------------------------------------------------ bool CALLBACK IsD3D10DeviceAcceptable(UINT Adapter, UINT Output, D3D10_DRIVER_TYPE DeviceType, DXGI_FORMAT BackBufferFormat, bool bWindowed, void* pUserContext) { // Only accept hardware devices return DeviceType == D3D10_DRIVER_TYPE_HARDWARE; } // ------------------------------------------------------------------------------------------------ HRESULT CALLBACK OnD3D10CreateDevice(ID3D10Device* d3d10, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext) { HRESULT hr = D3D_OK; V_RETURN(gDialogResourceManager.OnD3D10CreateDevice(d3d10)); V_RETURN(D3DX10CreateFont(d3d10, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Verdana", &gFont10;)); V_RETURN(D3DX10CreateSprite(d3d10, 512, &gSprite10;)); gTxtHelper = new CDXUTTextHelper(NULL, NULL, gFont10, gSprite10, 15); // Create our stereo parameter texture V_RETURN(CreateStereoParamTextureAndView(d3d10)); // Initialize the stereo texture manager. Note that the StereoTextureManager was created // before the device. This is important, because NvAPI_Stereo_CreateConfigurationProfileRegistryKey // must be called BEFORE device creation. gStereoTexMgr->Init(d3d10); // Give each of our scenes a chance to load their resources. for (std::vector::iterator it = gScenes.begin(); it != gScenes.end(); ++it) { (*it)->SetStereoParamRV(gStereoParamTextureRV); V_RETURN((*it)->LoadResources(d3d10)); } return hr; } // ------------------------------------------------------------------------------------------------ void CALLBACK OnD3D10DestroyDevice(void* pUserContext) { // Clean everything up. gDialogResourceManager.OnD3D10DestroyDevice(); for (std::vector::iterator it = gScenes.begin(); it != gScenes.end(); ++it) { (*it)->UnloadResources(); } SAFE_RELEASE(gStereoParamTextureRV); SAFE_RELEASE(gStereoParamTexture); SAFE_DELETE(gStereoTexMgr); SAFE_RELEASE(gFont10); SAFE_RELEASE(gSprite10); SAFE_DELETE(gTxtHelper); } // ------------------------------------------------------------------------------------------------ HRESULT CALLBACK OnD3D10ResizedSwapChain(ID3D10Device* d3d10, IDXGISwapChain *pSwapChain, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext) { HRESULT hr = D3D_OK; V_RETURN(gDialogResourceManager.OnD3D10ResizedSwapChain(d3d10, pBackBufferSurfaceDesc)); // All scenes need a chance to handle the resize. for (std::vector::iterator it = gScenes.begin(); it != gScenes.end(); ++it) { (*it)->OnD3D10ResizedSwapChain(d3d10, pSwapChain, pBackBufferSurfaceDesc); } gUI.SetLocation( pBackBufferSurfaceDesc->Width - 170, 0 ); gUI.SetSize( 170, 170 ); return hr; } // ------------------------------------------------------------------------------------------------ void CALLBACK Render(ID3D10Device* d3d10, double fTime, float fElapsedTime, void* pUserContext) { // First, we update our stereo texture gStereoTexMgr->UpdateStereoTexture(d3d10, gStereoParamTexture, false); // Then, we tell the scene what the current convergence depth is. Cursor rendering // uses this information to cause the cursor to draw at screen depth if the cursor // isn't currently over an object in the scene. gScenes[gActiveScene]->SetConvergenceDepth(gStereoTexMgr->GetConvergenceDepth()); // Then, clear our render targets, render the world and finish with the hud. ClearRenderTargets(d3d10); RenderWorld(d3d10, fTime, fElapsedTime); RenderHUD(d3d10, fTime, fElapsedTime); } // ------------------------------------------------------------------------------------------------ void CALLBACK OnD3D10ReleasingSwapChain(void* pUserContext) { gDialogResourceManager.OnD3D10ReleasingSwapChain(); } // ------------------------------------------------------------------------------------------------ bool CALLBACK ModifyDeviceSettings(DXUTDeviceSettings* pDeviceSettings, void* pUserContext) { if (pDeviceSettings->ver == DXUT_D3D10_DEVICE) { #if _DEBUG // Set debug if debugging. In debug, run aliased mode because // otherwise DXUT deletes a target while bound, causing many, many // spew messages. pDeviceSettings->d3d10.CreateFlags |= D3D10_CREATE_DEVICE_DEBUG; pDeviceSettings->d3d10.sd.SampleDesc.Count = 1; #else // I like AA, so turn it on here. pDeviceSettings->d3d10.sd.SampleDesc.Count = 4; #endif pDeviceSettings->d3d10.sd.SampleDesc.Quality = 0; } return true; } // ------------------------------------------------------------------------------------------------ LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext) { // WM_MOUSEMOVE needs to make it to the active scene to draw the cursor in the right place. *pbNoFurtherProcessing = gDialogResourceManager.MsgProc(hWnd, uMsg, wParam, lParam); if( *pbNoFurtherProcessing && uMsg != WM_MOUSEMOVE) return 0; // Again, make sure that WM_MOUSEMOVE makes it to the active scene, otherwise the mouse will // freeze when it's over our GUI elements, making it significantly less useful. *pbNoFurtherProcessing = gUI.MsgProc(hWnd, uMsg, wParam, lParam); if( *pbNoFurtherProcessing && uMsg != WM_MOUSEMOVE) return 0; // Pass all remaining windows messages to camera so it can respond to user input if (gActiveScene != cNoActiveScene) { return gScenes[gActiveScene]->HandleMessages(hWnd, uMsg, wParam, lParam); } return 0; } // ------------------------------------------------------------------------------------------------ void CALLBACK Update(double fTime, float fElapsedTime, void* pUserContext) { // Only the active scene gets the update gScenes[gActiveScene]->Update(fTime, fElapsedTime); } // ------------------------------------------------------------------------------------------------ void CALLBACK OnGUIEvent(UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext) { switch( nControlID ) { case IDC_TOGGLEFULLSCREEN: DXUTToggleFullScreen(); break; case IDC_MENU: default: // All other messages need to be given to all scenes, in case they need to handle // them. for (std::vector::iterator it = gScenes.begin(); it != gScenes.end(); ++it) { (*it)->OnGUIEvent(nEvent, nControlID, pControl, pUserContext); } } } // ------------------------------------------------------------------------------------------------ void InitUI() //UI User Interface 用户界面 { gUI.Init(&gDialogResourceManager;); int y = 10; gUI.SetCallback(OnGUIEvent); gUI.AddButton( IDC_TOGGLEFULLSCREEN, L"Toggle full screen", 35, y, 125, 22 ); gUI.AddButton(IDC_MENU,L"Menu",-1024,y,125,22); y += 24; int startId = IDC_TOGGLEFULLSCREEN + 1; for (std::vector::iterator it = gScenes.begin(); it != gScenes.end(); ++it) { (*it)->InitUI(gUI, 35, y, startId); } } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT) { HRESULT hr; V_RETURN(DXUTSetMediaSearchPath(L"..\\Source\\StereoIssues")); // Set Direct3D 10 callbacks. This sample won't work with Dx9, so don't bother setting any of // those. 设置 Direct3D 10回调信号 DXUTSetCallbackD3D10DeviceAcceptable(IsD3D10DeviceAcceptable); DXUTSetCallbackD3D10DeviceCreated(OnD3D10CreateDevice); DXUTSetCallbackD3D10SwapChainResized(OnD3D10ResizedSwapChain); DXUTSetCallbackD3D10FrameRender(Render); DXUTSetCallbackD3D10SwapChainReleasing(OnD3D10ReleasingSwapChain); DXUTSetCallbackD3D10DeviceDestroyed(OnD3D10DestroyDevice); // Set the generic callback functions 设置通用的回调函数 DXUTSetCallbackDeviceChanging(ModifyDeviceSettings); DXUTSetCallbackMsgProc(MsgProc); DXUTSetCallbackFrameMove(Update); // We'll deal with our own cursor in fullscreen mode. DXUTSetCursorSettings(false, false); // Needs to be called before any other NVAPI functions, so before device creation is fine. NvAPI_Initialize(); // ParamTextureManager must be created before the device to give our settings-loading code a chance to fire. gStereoTexMgr = new nv::stereo::ParamTextureManagerD3D10; gScenes.push_back(new StanfordBunnyScene); gActiveScene = 0; InitUI(); // UI用户界面 // Initialize DXUT and create the desired Win32 window and Direct3D device for the application DXUTInit(true, true); // Stereo is a Vista/Win7 feature for Dx9 and Dx10. One of the restrictions is that it only works // in fullscreen mode, but it's useful to debug and place breakpoints in windowed mode. // In any event, there is a button in the sample to toggle to fullscreen if needed, this only // controls the starting state of the app. bool windowed = false; #ifdef _DEBUG windowed = true; #endif DXUTCreateWindow(L"Stereo Issues"); DXUTCreateDevice(windowed); // Start the render loop 开始DXUT主要渲染循环 DXUTMainLoop(); int retval = DXUTGetExitCode(); // Clean everything up DXUTShutdown(retval); // We no longer have an active scene. gActiveScene = cNoActiveScene; // No memory leaks! for (std::vector::iterator it = gScenes.begin(); it != gScenes.end(); ++it) { SAFE_DELETE(*it); } return retval; }
windows蓝屏错误代码 1 0×00000001 不正确的函数。 2 0×00000002 系统找不到指定的档案。 3 0×00000003 系统找不到指定的路径。 4 0×00000004 系统无法开启档案。 5 0×00000005 拒绝存取。 6 0×00000006 无效的代码。 7 0×00000007 储存体控制区块已毁。 8 0×00000008 储存体空间不足,无法处理这个指令。 9 0×00000009 储存体控制区块地址无效。 10 0×0000000A 环境不正确。 11 0×0000000B 尝试加载一个格式错误的程序。 12 0×0000000C 存取码错误。 13 0×0000000D 资料错误。 14 0×0000000E 储存体空间不够,无法完成这项作业。 15 0×0000000F 系统找不到指定的磁盘驱动器。 16 0×00000010 无法移除目录。 16 0×00000010 无法移除目录。 17 0×00000011 系统无法将档案移到 其它的磁盘驱动器。 18 0×00000012 没有任何档案。 19 0×00000013 储存媒体为写保护状态。 20 0×00000014 系统找不到指定的装置。 21 0×00000015 装置尚未就绪。 22 0×00000016 装置无法识别指令。 23 0×00000017 资料错误 (cyclic redundancy check) 24 0×00000018 程序发出一个长度错误的指令。 25 0×00000019 磁盘驱动器在磁盘找不到 持定的扇区或磁道。 26 0×0000001A 指定的磁盘或磁盘无法存取。 27 0×0000001B 磁盘驱动器找不到要求的扇区。 28 0×0000001C 打印机没有纸。 29 0×0000001D 系统无法将资料写入指定的磁盘驱动器。 30 0×0000001E 系统无法读取指定的装置。 31 0×0000001F 连接到系统的某个装置没有作用。 32 0×00000020 The process cannot access the file because it is being used by another process. 33 0×00000021 档案的一部份被锁定, 现在无法存取。 34 0×00000022 磁盘驱动器的磁盘不正确。 请将 %2 (Volume Serial Number: %3) 插入磁盘机%1。 36 0×00000024 开启的分享档案数量太多。 38 0×00000026 到达档案结尾。 39 0×00000027 磁盘已满。 50 0×00000032 不支持这种网络要求。 51 0×00000033 远程计算机无法使用。 52 0×00000034 网络名称重复。 53 0×00000035 网络路径找不到。 54 0×00000036 网络忙碌中。 55 0×00000037 The specified network resource or device is no longer available. 56 0×00000038 The network BIOS command limit has been reached. 57 0×00000039 网络配接卡发生问题。 58 0×0000003A 指定的服务器无法执行要求的作业。 59 0×0000003B 网络发生意外错误。 60 0×0000003C 远程配接卡不兼容。 61 0×0000003D 打印机队列已满。 62 0×0000003E 服务器的空间无法储存等候打印的档案。 63 0×0000003F 等候打印的档案已经删除。 64 0×00000040 指定的网络名称无法使用。 65 0×00000041 拒绝存取网络。 65 0×00000041 拒绝存取网络。 66 0×00000042 网络资源类型错误。 67 0×00000043 网络名称找不到。 68 0×00000044 超过区域计算机网络配接卡的名称限制。 69 0×00000045 超过网络 BIOS 作业阶段的限制。 70 0×00000046 远程服务器已经暂停或者正在起始中。 71 0×00000047 由于联机数目已达上限,此时无法再联机到这台远程计算机。 72 0×00000048 指定的打印机或磁盘装置已经暂停作用。 80 0×00000050 档案已经存在。 82 0×00000052 无法建立目录或档案。 83 0×00000053 INT 24 失败 84 0×00000054 处理这项要求的储存体无法使用。 85 0×00000055 近端装置名称已经在使用中。 86 0×00000056 指定的网络密码错误。 87 0×00000057 参数错误。 88 0×00000058 网络发生资料写入错误。 89 0×00000059 此时系统无法执行其它行程。 100 0×00000064 无法建立其它的系统 semaphore。 101 0×00000065 属于其它行程专用的 semaphore. 102 0×00000066 semaphore 已经设定,而且无法关闭。 103 0×00000067 无法指定 semaphore 。 104 0×00000068 在岔断时间无法要求专用的 semaphore 。 104 0×00000068 在岔断时间无法要求专用的 semaphore 。 105 0×00000069 此 semaphore 先前的拥有权已经结束。 106 0×0000006A 请将磁盘插入 %1。 107 0×0000006B 因为代用的磁盘尚未插入,所以程序已经停止。 108 0×0000006C 磁盘正在使用中或被锁定。 109 0×0000006D Pipe 已经中止。 110 0×0000006E 系统无法开启指定的 装置或档案。 111 0×0000006F 档名太长。 112 0×00000070 磁盘空间不足。 113 0×00000071 没有可用的内部档案标识符。 114 0×00000072 目标内部档案标识符不正确。 117 0×00000075 由应用程序所执行的 IOCTL 呼叫 不正确。 118 0×00000076 写入验证参数值不正确。 119 0×00000077 系统不支持所要求的指令。 120 0×00000078 此项功能仅在 Win32 模式有效。 121 0×00000079 semaphore 超过逾时期间。 122 0×0000007A 传到系统呼叫的资料区域 太小。 123 0×0000007B 文件名、目录名称或储存体卷标语法错误。 124 0×0000007C 系统呼叫层次不正确。 125 0×0000007D 磁盘没有设定卷标。 126 0×0000007E 找不到指定的模块。 127 0×0000007F 找不到指定的程序。 128 0×00000080 没有子行程可供等待。 128 0×00000080 没有子行程可供等待。 129 0×00000081 %1 这个应用程序无法在 Win32 模式下执行。 130 0×00000082 Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O. 131 0×00000083 尝试将档案指针移至档案开头之前。 132 0×00000084 无法在指定的装置或档案,设定档案指针。 133 0×00000085 JOIN 或 SUBST 指令 无法用于 内含事先结合过的磁盘驱动器。 134 0×00000086 尝试在已经结合的磁盘驱动器,使用 JOIN 或 SUBST 指令。 135 0×00000087 尝试在已经替换的磁盘驱动器,使 用 JOIN 或 SUBST 指令。 136 0×00000088 系统尝试删除 未连结过的磁盘驱动器的连结关系。 137 0×00000089 系统尝试删除 未替换过的磁盘驱动器的替换关系。 138 0×0000008A 系统尝试将磁盘驱动器结合到已经结合过之磁盘驱动器的目录。 139 0×0000008B 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。 140 0×0000008C 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。 141 0×000000 系统尝试将磁盘驱动器 SUBST 成已结合的磁盘驱动器 目录。 142 0×0000008E 系统此刻无法执行 JOIN 或 SUBST。 143 0×0000008F 系统无法将磁盘驱动器结合或替换同一磁盘驱动器下目录。 144 0×00000090 这个目录不是根目录的子目录。 145 0×00000091 目录仍有资料。 146 0×00000092 指定的路径已经被替换过。 147 0×00000093 资源不足,无法处理这项 指令。 148 0×00000094 指定的路径这时候无法使用。 148 0×00000094 指定的路径这时候无法使用。 149 0×00000095 尝试要结合或替换的磁盘驱动器目录,是已经替换过的的目标。 150 0×00000096 CONFIG.SYS 文件未指定系统追踪信息,或是追踪功能被取消。 151 0×00000097 指定的 semaphore事件 DosMuxSemWait 数目不正确。 152 0×00000098 DosMuxSemWait 没有执行;设定太多的 semaphore。 153 0×00000099 DosMuxSemWait 清单不正确。 154 0×0000009A 您所输入的储存媒体标 元长度限制。 155 0×0000009B 无法建立其它的执行绪。 156 0×0000009C 接收行程拒绝接受信号。 157 0×0000009D 区段已经被舍弃,无法被锁定。 158 0×0000009E 区段已经解除锁定。 159 0×0000009F 执行绪识别码的地址不正确。 160 0×000000A0 传到 DosExecPgm 的自变量字符串不正确。 161 0×000000A1 指定的路径不正确。 162 0×000000A2 信号等候处理。 164 0×000000A4 系统无法建立执行绪。 167 0×000000A7 无法锁定档案的部份范围。 170 0×000000AA 所要求的资源正在使用中。 173 0×000000AD 取消范围的锁定要求不明显。 174 0×000000AE 档案系统不支持自动变更锁定类型。 180 0×000000B4 系统发现不正确的区段号码。 182 0×000000B6 操作系统无法执行 %1。 182 0×000000B6 操作系统无法执行 %1。 183 0×000000B7 档案已存在,无法建立同一档案。 186 0×000000BA 传送的旗号错误。 187 0×000000BB 指定的系统旗号找不到。 188 0×000000BC 操作系统无法执行 %1。 189 0×000000BD 操作系统无法执行 %1。 190 0×000000BE 操作系统无法执行 %1。 191 0×000000BF 无法在 Win32 模式下执行 %1。 192 0×000000C0 操作系统无法执行 %1。 193 0×000000C1 %1 不是正确的 Win32 应用程序。 194 0×000000C2 操作系统无法执行 %1。 195 0×000000C3 操作系统无法执行 %1。 196 0×000000C4 操作系统无法执行 这个应用程序。 197 0×000000C5 操作系统目前无法执行 这个应用程序。 198 0×000000C6 操作系统无法执行 %1。 199 0×000000C7 操作系统无法执行 这个应用程序。 200 0×000000C8 程序代码的区段不可以大于或等于 64KB。 201 0×000000C9 操作系统无法执行 %1。 202 0×000000CA 操作系统无法执行 %1。 203 0×000000CB 系统找不到输入的环境选项。\r 205 0×000000CD 在指令子目录下,没有任何行程有信号副处理程序。 206 0×000000CE 文件名称或扩展名太长。 207 0×000000CF ring 2 堆栈使用中。 207 0×000000CF ring 2 堆栈使用中。 208 0×000000D0 输入的通用档名字元 * 或 ? 不正确, 或指定太多的通用档名字元。 209 0×000000D1 所传送的信号不正确。 210 0×000000D2 无法设定信号处理程序。 212 0×000000D4 区段被锁定,而且无法重新配置。 214 0×000000D6 附加到此程序或动态连结模块的动态连结模块太多。 215 0×000000D7 Can’t nest calls to LoadModule. 230 0×000000E6 The pipe state is invalid. 231 0×000000E7 所有的 pipe instances 都在忙碌中。 232 0×000000E8 The pipe is being closed. 233 0×000000E9 No process is on the other end of the pipe. 234 0×000000EA 有更多可用的资料。 240 0×000000F0 作业阶段被取消。 254 0×000000FE 指定的延伸属性名称无效。 255 0×000000FF 延伸的属性不一致。 259 0×00000103 没有可用的资料。 266 0×0000010A 无法使用 Copy API。 267 0×0000010B 目录名称错误。 275 0×00000113 延伸属性不适用于缓冲区。 276 0×00000114 在外挂的档案系统上的延伸属性档案已经毁损。 277 0×00000115 延伸属性表格文件满。 278 0×00000116 指定的延伸属性代码无效。 278 0×00000116 指定的延伸属性代码无效。 282 0×0000011A 外挂的这个档案系统不支持延伸属性。 288 0×00000120 意图释放不属于叫用者的 mutex。 298 0×0000012A semaphore 传送次数过多。 299 0×0000012B 只完成 Read/WriteProcessMemory 的部份要求。 317 0×0000013D 系统找不到位于讯息文件 %2 中编号为 0×0000%1 的讯息。 487 0×000001E7 尝试存取无效的地址。 534 0×00000216 运算结果超过 32 位。 535 0×00000217 信道的另一端有一个行程在接送资料。 536 0×00000218 等候行程来开启信道的另一端。 994 0×000003E2 存取延伸的属性被拒。 995 0×000003E3 由于执行绪结束或应用程序要求,而异常终止 I/O 作业。 996 0×000003E4 重叠的 I/O 事件不是设定成通知状态。 997 0×000003E5 正在处理重叠的 I/O 作业。 998 0×000003E6 对内存位置的无效存取。 999 0×000003E7 执行 inpage 作业发生错误。 1001 0×000003E9 递归太深,堆栈满溢。 1002 0×000003EA 窗口无法用来传送讯息。 1003 0×000003EB 无法完成这项功能。 1004 0×000003EC 旗号无效。 1005 0×000003ED 储存媒体未含任何可辨识的档案系统。 请确定以加载所需的系统驱动程序,而且该储存媒体并未毁损。 1006 0×000003EE 储存该档案的外部媒体发出警告,表示该已开启档案已经无效。 1007 0×000003EF 所要求的作业无法在全屏幕模式下执行。 1008 0×000003F0 An attempt was made to reference a token that does not exist. 1009 0×000003F1 组态系统登录数据库毁损。 1010 0×000003F2 组态系统登录机码无效。 1011 0×000003F3 无法开启组态系统登录机码。 1012 0×000003F4 无法读取组态系统登录机码。 1013 0×000003F5 无法写入组态系统登录机码。 1014 0×000003F6 系统登录数据库中的一个档案必须使用记录或其它备份还原。 已经还原成功。 1015 0×000003F7 系统登录毁损。其中某个档案毁损、或者该档案的 系统映对内存内容毁损、会是档案无法复原。 1016 0×000003F8 系统登录起始的 I/O 作业发生无法复原的错误。 系统登录无法读入、写出或更新,其中的一个档案 内含系统登录在内存中的内容。 1017 0×000003F9 系统尝试将档案加载系统登录或将档案还原到系统登录中, 但是,指定档案的格式不是系统登录文件的格式。 1018 0×000003FA 尝试在标示为删除的系统登录机码,执行不合法的操作。 1018 0×000003FA 尝试在标示为删除的系统登录机码,执行不合法的操作。 1019 0×000003FB 系统无法配置系统登录记录所需的空间。 1020 0×000003FC 无法在已经有子机码或数值的系统登录机码建立符号连结。 1021 0×000003FD 无法在临时机码下建立永久的子机码。 1022 0×000003FE 变更要求的通知完成,但信息 并未透过呼叫者的缓冲区传回。呼叫者现在需要自行列举档案,找出变更的地方。 1051 0×0000041B 停止控制已经传送给其它服务 所依峙的一个服务。 1052 0×0000041C 要求的控制对此服务无效 1053 0×0000041D The service did not respond to the start or control request in a timely fashion. 1054 0×0000041E 无法建立服务的执行绪。 1055 0×0000041F 服务数据库被锁定。 1056 0×00000420 这种服务已经在执行。 1057 0×00000421 帐户名称错误或者不存在。 1058 0×00000422 指定的服务暂停作用,无法激活。 1059 0×00000423 指定循环服务从属关系。 1060 0×00000424 指定的服务不是安装进来的服务。 1061 0×00000425 该服务项目此时无法接收控制讯息。 1062 0×00000426 服务尚未激活。 1063 0×00000427 无法联机到服务控制程序。 1064 0×00000428 处理控制要求时,发生意外状况。 1065 0×00000429 指定的数据库不存在。 1065 0×00000429 指定的数据库不存在。 1066 0×0000042A 服务传回专属于服务的错误码。 1067 0×0000042B The process terminated unexpectedly. 1068 0×0000042C 从属服务或群组无法激活。 1069 0×0000042D 因为登入失败,所以没有激活服务。 1070 0×0000042E 在激活之后,服务在激活状态时当机。 1071 0×0000042F 指定服务数据库锁定无效。 1072 0×00000430 指定的服务已经标示为删除。 1073 0×00000431 指定的服务已经存在。 1074 0×00000432 系统目前正以上一次执行成功的组态执行。 1075 0×00000433 从属服务不存在,或已经标示为删除。 1076 0×00000434 目前的激活已经接受上一次执行成功的 控制设定。 1077 0×00000435 上一次激活之后,就没有再激活服务。 1078 0×00000436 指定的名称已经用于服务名称或服务显示 名称。 1100 0×0000044C 已经到了磁带的最后。 1101 0×0000044D 到了档案标示。 1102 0×0000044E 遇到磁带的开头或分割区。 1103 0×0000044F 到了档案组的结尾。 1104 0×00000450 磁带没有任何资料。 1105 0×00000451 磁带无法制作分割区。 1106 0×00000452 存取多重容体的新磁带时,发现目前 区块大小错误。 1107 0×00000453 加载磁带时,找不到磁带分割区信息。 1108 0×00000454 无法锁住储存媒体退带功能。 1108 0×00000454 无法锁住储存媒体退带功能。 1109 0×00000455 无法解除加载储存媒体。 1110 0×00000456 磁盘驱动器中的储存媒体已经变更。 1111 0×00000457 已经重设 I/O 总线。 1112 0×00000458 磁盘驱动器没有任何储存媒体。 1113 0×00000459 目标 multi-byte code page,没有对应 Unicode 字符。 1114 0×0000045A 动态链接库 (DLL) 起始例程失败。 1115 0×0000045B 系统正在关机。 1116 0×0000045C 无法中止系统关机,因为没有关机的动作在进行中。 1117 0×0000045D 因为 I/O 装置发生错误,所以无法执行要求。 1118 0×0000045E 序列装置起始失败,会取消加载序列驱动程序。 1119 0×0000045F 无法开启装置。这个装置与其它装置共享岔断要求 (IRQ)。 至少已经有一个使用同一IRQ 的其它装置已经开启。 1120 0×00000460 A serial I/O operation was completed by another write to the serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.) 1121 0×00000461 因为已经过了逾时时间,所以序列 I/O 作业完成。(IOCTL_SERIAL_XOFF_COUNTER 不是零。) 1122 0×00000462 在磁盘找不到任何的 ID 地址标示。 1123 0×00000463 磁盘扇区 ID 字段与磁盘控制卡追踪地址 不符。 1124 0×00000464 软式磁盘驱动器控制卡回报了一个软式磁盘驱动器驱动程序无法识别的错误。 1125 0×00000465 软式磁盘驱动器控制卡传回与缓存器中不一致的结果。 1126 0×00000466 存取硬盘失败,重试后也无法作业。 1127 0×00000467 存取硬盘失败,重试后也无法作业。 1128 0×00000468 存取硬盘时,必须重设磁盘控制卡,但是 连重设的动作也失败。 1129 0×00000469 到了磁带的最后。 1130 0×0000046A 可用服务器储存空间不足,无法处理这项指令。 1131 0×0000046B 发现潜在的死锁条件。 1132 0×0000046C 指定的基本地址或档案位移没有适当 对齐。 1140 0×00000474 尝试变更系统电源状态,但其它的应用程序或驱动程序拒绝。 1141 0×00000475 系统 BIOS 无法变更系统电源状态。 1150 0×0000047E 指定的程序需要新的 Windows 版本。 1151 0×0000047F 指定的程序不是 Windows 或 MS-DOS 程序。 1152 0×00000480 指定的程序已经激活,无法再激活一次。 1153 0×00000481 指定的程序是为旧版的 Windows 所写的。 1154 0×00000482 执行此应用程序所需的链接库档案之一毁损。 1155 0×00000483 没有应用程序与此项作业的指定档案建立关联。 1156 0×00000484 传送指令到应用程序发生错误。 1157 0×00000485 找不到执行此应用程序所需的链接库档案。 1200 0×000004B0 指定的装置名称无效。 1201 0×000004B1 装置现在虽然未联机,但是它是一个记忆联机。 1202 0×000004B2 尝试记忆已经记住的装置。 1203 0×000004B3 提供的网络路径找不到任何网络提供程序。 1203 0×000004B3 提供的网络路径找不到任何网络提供程序。 1204 0×000004B4 指定的网络提供程序名称错误。 1205 0×000004B5 无法开启网络联机设定文件。 1206 0×000004B6 网络联机设定文件坏掉。 1207 0×000004B7 无法列举非容器。 1208 0×000004B8 发生延伸的错误。 1209 0×000004B9 指定的群组名称错误。 1210 0×000004BA 指定的计算机名称错误。 1211 0×000004BB 指定的事件名称错误。 1212 0×000004BC 指定的网络名称错误。 1213 0×000004BD 指定的服务名称错误。 1214 0×000004BE 指定的网络名称错误。 1215 0×000004BF 指定的资源共享名称错误。 1216 0×000004C0 指定的密码错误。 1217 0×000004C1 指定的讯息名称错误。 1218 0×000004C2 指定的讯息目的地错误。 1219 0×000004C3 所提供的条件与现有的条件组发生冲突。 1220 0×000004C4 尝试与网络服务器联机,但是 与该服务器的联机已经太多。 1221 0×000004C5 其它网络计算机已经在使用这个工作群组或网域名称。 1222 0×000004C6 网络没有显示出来或者没有激活。 1223 0×000004C7 使用者已经取消作业。 1224 0×000004C8 要求的作业无法在已经开启使用者对应区段的档案执行。 1225 0×000004C9 远程系统拒绝网络联机。 1225 0×000004C9 远程系统拒绝网络联机。 1226 0×000004CA 关闭网络联机。 1227 0×000004CB 网络传输端点已经有相关连的地址。 1228 0×000004CC 地址尚未有相关的网络端点。 1229 0×000004CD 尝试在不存在的网络连线作业。 1230 0×000004CE 在作用中的网络联机上执行无效的作业。 1231 0×000004CF 无法传输到远程网络。 1232 0×000004D0 无法联机到远程系统。 1233 0×000004D1 远程系统不支持传输通讯协议。 1234 0×000004D2 远程系统的目的地网络端点没有作何执行中的服务。 1235 0×000004D3 要求已经中止。 1236 0×000004D4 进端系统已经中断网络联机。 1237 0×000004D5 无法完成作业,请重试。 1238 0×000004D6 无法与服务器联机,原因是这个帐户已经到达同时联机数目 的上限。 1239 0×000004D7 尝试在这个帐户未授权的时间登入网络。 1240 0×000004D8 这个帐户无法从这个地方登入网络。 1241 0×000004D9 网络地址无法用于这个要求的作业。 1242 0×000004DA 服务已经登记。 1243 0×000004DB 指定的服务不存在。 1244 0×000004DC 作业无法执行,原因是使用者尚未授权使用。 1245 0×000004DD 要求的作业无法执行,原因是使用者尚未登入网络。 指定的服务不存在。 1246 0×000004DE 传回要求呼叫者继续工作的讯息。 1247 0×000004DF 在完成起始作业之后,尝试再执行起始作业。 1248 0×000004E0 没有其它的近端装置。 1300 0×00000514 并未指定所有的参照权限给呼叫者。 1301 0×00000515 帐户名称与安全识别码之间尚有未执行完成的联机。 1302 0×00000516 此帐户并未设定特别的系统配额限制。 1303 0×00000517 没有可用的加密机码。传回一个已知的加密机码。 1304 0×00000518 NT 密码太复杂,无法转换成 LAN Manager 密码。传回的LAN Manager密码是一个空字符串。 1305 0×00000519 修正层次不详。 1306 0×0000051A 表示两个修订阶层不兼容。 1307 0×0000051B 此安全识别码无法指定为这个对象的拥有者。 1308 0×0000051C 此安全识别码无法指定为主要的对象群组。 1309 0×0000051D An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client. 1310 0×0000051E 不可以关闭群组。 1311 0×0000051F 目前没有可登入的服务器,所以无法处理登入要求。 1312 0×00000520 指定登入作业阶段不存在。该作业阶段可能已经 结束。 1313 0×00000521 指定的权限不存在。 1313 0×00000521 指定的权限不存在。 1314 0×00000522 客户端未列出要求的权限。 1315 0×00000523 所提供的名称格式与帐户名称不符。 1316 0×00000524 指定的使用者已经存在。 1317 0×00000525 指定的使用者不存在。 1318 0×00000526 指定的群组已经存在。 1319 0×00000527 指定的群组不存存。 1320 0×00000528 指定的使用者帐户已经是指定群组的成员,或 指定的群组因为内含成员而无法删除。 1321 0×00000529 指定的使用者帐户不是指定的群组帐户成员。 1322 0×0000052A 上一次留下来的管理帐户无法关闭或 删除。 1323 0×0000052B 无法更新密码。所输入的密码不正确。 1324 0×0000052C 无法更新密码。所输入的新密码内含不符合 密码规定。 1325 0×0000052D 因为违反密码更新规则,所以无法更新密码。 1326 0×0000052E 登入失败: 无法辨识的使用者名称或密码错误。 1327 0×0000052F 登入失败: 使用者帐户限制。 1328 0×00000530 登入失败: 违反帐户登入时间限制。 1329 0×00000531 登入失败: 使用者不可登入这部计算机。 1330 0×00000532 登入失败: 指定的帐户密码过期。 1331 0×00000533 登入失败: 帐户目前无效。 1332 0×00000534 帐户名称与帐户识别码不符。 1333 0×00000535 一次要求太多的近端使用者识别码 (local user identifiers,LUIDs)。 1333 0×00000535 一次要求太多的近端使用者识别码 (local user identifiers,LUIDs)。 1334 0×00000536 没有可用的近端使用者识别码 (local user identifiers ,LUIDs)。 1335 0×00000537 安全识别码的转授权部份对这个特殊用法无效。 1336 0×00000538 无效的存取控制清单结构。 1337 0×00000539 安全识别码结构无效。 1338 0×0000053A 安全叙述子结构无效。 1340 0×0000053C 无法建立继承的存取控制清单或存取控件目。 1341 0×0000053D 服务器目前无效。 1342 0×0000053E 服务器目前可以使用。 1343 0×0000053F 所提供的值是无效的识别码授权值。 1344 0×00000540 没有可供安全信息更新使用的内存。 1345 0×00000541 指定的属性无效,或指定的属性与整个群
SakEmail components Copyright ?1997 - 2003 Sergio A. Kessler web: http://groups.yahoo.com/group/sakemail/To subscribe to the mailing list of sakemail, just go tohttp://groups.yahoo.com/group/sakemail/History:0.9 - First released version0.9.1b -Fixed when a mail server reply on the connection with more than one line0.9.2b - I forget to return a value in functions retrieveHeader/Message =) and fixed it. Some minor bugs that I don‘t remember fixed.- Added MIME-compliant base64 support (not for use by now). Added examples.0.9.2.1b- Fixed a bug when send a mail and the first line disappear (thanks to Arun)- Now, you could do MySMTP.MsgTo := ‘a@doma.com; b@domb.com;c@domc.com‘; the spaces before/after semicolon doesn‘t matter (I hope ;)).0.9.3b- Many changes, I added a SakMsg component that make send binary attachments a snap. But have one problem, if you send as attach a file > 20 Kb, it doesn‘t work (I don‘t know why, maybe a problem of sockets). Developed with a version 2.0b of WSockets and D3.0.9.3.1b- Changed the POP.login to a function that return the number of new msgs.- Added the event OnRetrieveProgress on the SakPOP, and fixed the example, sorry =)- Minor changes to the code.1.0- Developed with WSockets 1.2 POP.Login now return a boolean depending id the user is authorized, and POP.Init return the number of new msgs.1.01- Fixed a bug with a bounced mail.1.02- Minor bugs fixed (some variants of boundary)14/10/971.1.0- Warning: WSockets1.2 have some bugs that result in bad attachments. So I decided to use the sockets of Delphi 3 founded in D3 c/s D3.01 pro and D3.01 c/s. Now all seems to work fine and much more smooth. And of course the interface of SakEmail hasn‘t changed.26/10/971.2.0- Added the Reply-To field to TSakMsg comp. Now you must use ‘,‘ when you want to send the msg. to multiple recipients, i.e.: ‘a@doma.com, b@domb.com,c@domc.com‘ This change is done for better compatibility with other emails clients.- Better formatting of the field Date of TSakMsg. Some changes to the code.17/11/971.2.1- Now, all searches are made in case-insensitive, it could prevent some unexpected responses (no one reported, but...). Some changes to the code (again).20/11/971.2.2- Some bugs fixed. (Thanks to Serge Wagener from .lu)24/11/971.2.3- Added the field ‘MIME-Version: 1.0‘. It seems that is necessary :)25/11/971.3.0- Added compatibility with SCO and VAX servers. Fixed a minor bug with the boundary.- Change the generator of the message id.- Added the field MessageId and InReplyTo to the TSakMsg component.- Added the field In-Reply-To that is added to the message generated when it is <> ‘‘.30/11/971.3.1- Almost rewrote the parsing code. Now is more easy for you if you want hack/modify the code.- Better treatment of emails with html inside.15/12/971.4- Added support for UUCoded attachments.- Added a small delay when sending the email, seems that some servers can‘t deglut the info too fast, causing problems with sockets buffers and leading to crash the client machine, I don‘t know if is a Borland bug or Microsoft bug. (thanks to Don Higgins).19/12/971.4.1- Fixed a bug that send double ‘<‘ and ‘>‘ (ie. <>) when the full user name is used. Check the new SMTP demo. Thanks to Serge Wagener for locate this bug, track it down and send me the fix.2/2/981.5.0- Added the Canceled property to TSakPOP and to TSakSMTP. Due to this addition now RetrieveAllMessages is a function that return the number of msgs. retrieved and SendMessage is a boolean function (maybe someone has pressed the cancel btn).- Fixed a bug when the subject field is too large.9/2/981.5.1- Fixed a bug with a message within a message (recursive msgs).18/2/981.5.2- Fixed a bug what happens when after the field ‘To:‘ appear a blank line(Thanks to Osvaldo Fillia). Fixed a bug when sending email to more than two address (the separator is still ‘,‘).9/3/981.6.0- Sometimes the filenames of an attachment contain invalid chars making very dificult to open a TSaveDialog (you have noted this ?), now SakEmail deletes the invalid chars.- Applied a patch from Matjaz Bravc, that resolve the problem of localized dates, letting you choose (in design time) if you want localized dates (NOT recommended) or standards dates (english) via the LocalizedDates boolean property in the TSakSMTP comp. Thanks also to Serge Dosyukov for sending me a fix.- Also I applied another patch of Gregor Duchalski that cure a bug with PChar when this unit is used under NT. - It seems that some machines need more delay when sendig a msg (see previous posting 19/12/97), thanks to Matjaz Bravc.- I discover a bug in the transparency code, it is fixed now. Did you see the benefits of Open Source Software ? :)26/3/981.6.1- Added a FUNCFileName private variable to manage the complete path of the attached file. I receive problems reports with this, it work now ?.- Reduced the line sleep to 30 (tell me if this value doesn‘t work for you).27/4/981.7.0- Fixed a memory leak, thanks to Don Higgins.- Moved the string esErrorInFormatOfMsg to a property of SakPOP.- Because some people need to use IP addresses instead of Host names, I‘ve added a new property IPAddress to SakPOP and SakSMTP. If both are filled, then the Host name will be used, thanks to Roger F. Reghin for reporting this. The side effect for this is that YOUR app must check if the host is a host name or a IP address, in my app I remove the periods and try to convert the result to a float (long integers don‘t work, but float accept chars ‘e‘) if it doesn‘t work I assume that is a host name (someone has a better and simple idea ?).- Added the property FileStream to the class TAtachedFile and the procedure SaveToStream, this was done by Brian Sheperd- The address separator (in the TO: field) is ‘,‘ and ‘;‘ now (before it was ‘,‘ only).1.7.1- Roger F. Reghin has sended me a pair of nice patches that resolve in a good behavior when the destination address is something like "Roger Reghin" and some servers says that they couldn‘t relay that mail, etc. Also Roger has made the IPAddress property obsolete (do not use it, use Host instead), SakEmail will resolve the host properly no matter if it is a host name or a IP address. So in the next version I will remove the IPAddress property. Thank you, Roger.1.8.0- Well, it seems that I made a mistake, I investigated the previous behavior and it is a fault of the SMTP (RFC 821), so I fixed it.- The IPAddress property has been removed, use Host. Goeran Strehl (asem) has sended me a patch that fix a memory leak and one problem with the object inspector and the Text property of a SakMsg. Dmitry Bondarenko say that some servers do not send the msg size after the RETR command, so he fix that issuing a LIST n command first (work nicely).- Added the property CC (Carbon Copy) to the SakMsg object.1.8.1- Added the property ReturnPath to the SakMsg comp. Minor changes to the scanning code for the filename of attachments.1.8.2- Fixed a bug with the filename of attachments (thanks to Taufer Pavel Ing.).- Added the function IsIPAddress from hou yg (the actual code don‘t work if the server is 265.net :) Fixed a minor bug with html pages like attachments. Some fucking email server return a bounded message declaring the boundary like ‘boundary = ‘ and not ‘boundary=‘ wich is clear in the RFC, fixed.1.8.3- A obscure bug was found by HuangYeJun from china, in the RetrieveHeaders function if the retrieved text was larger than 1024 bytes and the crlf.crlf fall in the middle of two chunks, the function is blocked. I don‘t use this function, btw.1.8.3.1- Just cleaned up a bit the FindUUAtachs function. Not bug or enhancements release. Serge Wagener put me to work >:|1.8.4- Dmitry Bondarenko (again) has found a bug in wich I do not respect the RFC, wich say that replys from the SMTP server could be multi-line, and the previous version just manage as far as two lines. He also send me a nice patch, so the bug is fixed.- Craig Manley added a ExtraHeaders property, please, use with care, it‘s just not valid to put inside it whatever thing.- The CC header was not being added to the headers that were being sent, so Craig fixed it.- Warning: I‘ve put try/except in the TSakPOP.Connect and TSMTP.Connect function around the line FSocket.Open, so you will need to write something like: myPOP.Connect; if POPError then ... in your code, the old way was: try myPOP.Connect; except ..... end; If you are strongly opossed to this change, drop me a line and tell me why (I‘m in doubts).1.8.5- Greg Nixon added the priority property. The default priority for each msg created will be prNormal, so you don‘t need to change your code any bit.1.8.6- Ulf Sturegren has added D4 compatibility, not many changes to the source (one letter), but he found the error.- Hou yg has sent to me a revisited IsIPAddress function, so I put the newer function in, infortunely my reply to him doesn‘t want to go.1.8.7- Ok, I discovered a weird bug, some old emailers (navigator 2) does not format the message in multipart mode if people send an attach, without writing any text and with no MIME settings. Fixed. This could be serious, I recommend upgrading.1.8.8- A small fix with the CC field. Some stupid mail servers put tabs in some fields (CC:, TO:) when they want to make a new line, the correct is to put at least a space in the beginning of the line, added a little code to "fix" that.1.8.9- Some ‘moderns‘ pop3 servers doesn‘t support the LAST command, so I‘ve added a little code to cope with this and added a boolean property ServerSupportLastCmd. See TSakPOP.Init for more details. Reported by Jan Najvarek.1.9.0- Kaufman Alex has added two properties to the SakMsg object, the ContentType and the Headers property, that should be self explaining (I modified a little the code he sended me, btw).1.9.1- I rewrote and greatly simplified the code that deal with the multiple address in the TO: field and remove some possible bugs in it.1.9.2- Alex discovered and fix a bug when a file attached is not enclosed between quotes, resulting in the filename without the first and last character.1.9.3- Better detection of the boundary in multipart messages. Fixed a bug when the attached file is empty.1.9.4- Chris G黱ther send me *lots* of memory leaks fixes, very good job, Chris. - Some weird PGP messages are now processed well.- Yang Qiandong from china fixed a compiler hint and a warning.- Modified TSakSMTP.FReceiveTextFromSocket as suggested by Greg Nixon.- Dmitry Bondarenko send me a patch that fixes some issues with the LAST command (that some servers don‘t implement) and other patch that fixes a problem when servers add spare words in the tail of the answer.- Some minor changes suggested by Matthew Vincent.- Support for _big_ attachments files (me).- Make the code more modular and simple (still is not very modular).1.10.0- Move some stuff to a sak_util unit.- Support for quoted-printable msgs, thanks to Chris G黱ther.- Fix the BCC field.- New property sakMsg.ContentTransferEncoding.2.0.0- Major reestructure of the files and the source code.- Simplifyied sakPOP3.pas a _lot_- Support encapsulated messages (message/rfc822).- Nested multipart messages are processed fine.- Attachs with quoted-printable are processed fine.- Many bugs fixes.2.0.1- A fiasco, sorry.2.0.2- Fixed a bug in the sak_CleanUpAddress.- Do the rigth job if the ContentType is ‘plain/text‘ and the encoding is base64.- Redone sak_ExtractAddress and sak_ExtractAlias.- New ‘Sender‘ property in SakMsg (normally not used, so do not use it, unless you know what you are doing) ‘Thanks‘ to Alex Kaufman for this.2.0.3- A *severe* bug with multiple addresses was fixed.2.0.4- Fixed bogus Message-number (Message-id is the correct) Thanks to Peter Honan- Added SizeInBytes property to the SakMsg component. (petition of Alex Kaufman)- Fixed a minor bug in TSakPOP.RetrieveHeaders. Fix from Alex.- Added RetrieveMessageOnlyHeaders and - RetrieveAllMessagesOnlyHeaders.2.0.5- Fix when the mail server reply is like (two cr).- Fix function IsIpAddress.- Both fixes by Alessandro Rossi.2.0.6- Fix a bug in the sak_Base64Decode function when the data to decode is null (I found it in the hard way).- Andy Charalambous make it sure you can send more than one email without disconnecting and connecting again.- And Chris ‘Memory Hunter‘ G黱ther killed some memory leaks (again).2.2.0- the f* sleep line that was bothering us for years is gone, gone, gone. Thanks to Syed Ahmed.- a getUIDL method of SakPOP. Thanks to Alex Kaufman.- a UIDL property on SakMsg. (me)- a SakPOP.GetUIDLsOnRetrieve boolean property (default false) (me)- change some ‘Exception.Create()‘ to ‘raise Exception.Create()‘ Thanks to Anton Saburov.- change SakPOP.Init from function to procedure (me)- new SakPOP.NewMsgsCount property (me)- changed SakPOP.Password to SakPOP.UserPassword (me)- changed SakPOP.ErrorInFormatOfMsg to SakPOP.StrErrorInFormatOfMsg- OnLookup event on SakPOP and SakSMTP. Thanks to Syed Ahmed.- OnConnecting event on SakPOP and SakSMTP (me).- OnReceiveTextFromSocket event on SakPOP and SakSMTP (me). (mostly for debug)- OnSendTextToSocket event on SakPOP and SakSMTP (me). (mostly for debug)- Headers are retrieved without the mail body (ugly bug, fix from Alex Kaufman)2.4.0- I‘ve revamped TSakMsg, many funcionality from SakPOP was moved to SakMsg, where it belongs.- Now SakMsg has a RawMail property wich you may find useful, now you can do: SakMsg1.RawMail.LoadFromFile(‘(uidl).mail‘); SakMsg1.ParseMsg; or SakMsg1.RawMail.LoadFromStream( myStream); SakMsg1.ParseMsg; or SakMsg1.RawMail.SaveToFile( ‘(uidl).mail‘); etc, etc...- Added a property TSakMsg.ClearRawMailAfterParse for memory saving.- the return of the f* sleep line (it causes freezes on winsock 1.1 systems like win95, win98 has winsock 2 so there is no problem if you remove the line)- lost of the DecodeProgess events :( (sorry, I don‘t know how to fit this events on the new SakMsg)2.6.0- the sleep() line is dead, it will never come back. Sending an email is a pleasure now.- SakMsg has a TextEncoding (8Bit, Base64) property, I think this will be useful to people with others charset than iso-8859-1- the base64 routines have been rewritten, they are more OO and faster (they are now in SakMIME.pas).- cosmetic changes all over the place.2.6.1- simplifyed ParseMsg2 a lot, it work better now.- speed up the search for uucoded attachs (the previous search was very dumb)- fixed bug Msg.SizeInBytes always 0- added a couple of Application.ProcessMessages to make the app more responsive.2.6.2- moved some functions from sak_utils to SakMIME.- make const parameters all over the place.- fix the bug that introduces a final crlf in quoted-printable attachs.- fix a division by zero if attached file is 0 bytes long, fixed by Peter Kollanyi.2.6.3- fix a rare bug when the header of a email (more probably a encapsulated one) has first line/s in blank. Easy and innocuous bug.2.6.4- fix the bug that insert the attachs of type text/* on the body of the email.- change the Smtp.SendMessage for Smtp.SendTheMessage to avoid a BCBuilder problem. Both problems reported by Andreas Franzen. SendMessage is still there, but it‘s now deprecated, I will remove it in the future.2.6.5- moved the ParseMsg activation from SakPOP to SakMsg (where it belong), this means that after setting the RawMail property of SakMsg, this does a ParseMsg automatically. before: SakMsg1.RawMail := ... SakMsg1.ParseMsg; now: SakMsg1.RawMail := ... hope I‘m not breaking too much code out there ... :)- some changes in the way attachments are processed (now the html part is separated correctly and images within the html are recognized)- RetrieveMessage() and RetrieveMessageOnlyHeaders() now take an additional parameter, a TSakMsg var, so people can change some parameters before parsing, see the source in SakPOP3.pas (the old way is still supported, but they will be removed in the future)- bug fixes that I do not remember.3.0.0- moved code around.- removed deprecated functions (I told you about this)- new SakAttFile unit.- Base64Encode( AttFile), Base64Decode( AttFile), UUDecode( AttFile) has been moved to the TAtachedFile object, so you can do AttFile.Base64Encode, AttFile.Base64Decode, etc- SakSMTP have lost EncodeStart, EncodeProgess and EncodeEnd events as a consequence of the previous change.- SakPOP.Canceled and SakSMTP.Canceled properties have been made read-only and SakPOP.Cancel and SakSMTP.Cancel procedures (or methods) have been added.- add a SakMsg.FillRawMail method that will fill the RawMail property with a rfc822 message based on the properties of SakMsg.- changed SakSMTP.Quit & SakPOP.Quit to Disconnect- deleted TAttachedFile.FileStream (redundant), use BodyBin- removed the function sak_getTempFileName (as it should no be trusted) use function sak_GetTempPath- the new SakIMAP component !, this make a pleasure to work with incoming emails (as you can have folders, etc). Note: the IMAP component has only been tested with the Uni. of Washington server, but it should work with any *STANDARD COMPLIANT* server. Anyways, the code of this component is very simple, so if you have problems, a look in the source code can enligthen you.3.0.1- fixed a brown paper type of bug.3.0.2- support the case where attachs do not come from files (Lars Karlslund)- minor bugfix in UUDecode function (Lars Karlslund)- if the SakMsg.Username is empty, do a VRFY command at the smtp server to try to get the full user name (sergio)- function TSakIMAP.GetFolderList (Peter Nagel)- function TSakIMAP.GetHierarchyDelim (Peter Nagel)- frustrated intent (ie. commented out) to remove memory leaks in POP, SMTP & IMAP destroy functions (Ronald Moesbergen)3.0.3- actually create (and free) the FolderList in sakIMAP (Neculau Andrei)- try to send the FQDM to the HELO command in SMTP (sergio)- commented out the VRFY command in SakSMTP, and cut the from address in the From field (in SakMsg), so if the username is empty, the SMTP server rewrite the from address in a complete way, with username & full address (sergio)- fix a minor bug in TBase64DecodingStream.Write function (Lars Karlslund)3.4.0- many, many improvements to the IMAP component by Peter Honan (I applied the patch with minor modifications, mainly to respect delphi coding standard, taking out the overloading, the selectFolder function was overcomplicated, etc)- FAQ updated (me)3.4.1- minimize the chance for two temporal messages stored on disk to collide (can be hit in previous versions if you run multiple instances of retrieveMessage at the same time)- FAQ updated.3.4.2- a new sak_CleanUpAddresses() implementation, by Knut Baardsen- better handling for temporal messages, suggested by Andrew- many improvements (including ACL -Access Control List) to the IMAP component by James Chaplin3.4.3- reverted to the old sak_CleanUpAddresses() implementation Knut‘s one is almost rigth, but don‘t let us use addresses without domains- add Headers.Clear before filling headers, by "Antonio Carlos Ribeiro Faria" 3.5.0- add TSakMsg.LoadFromTextFile from Oak Chantosa- big jumbo mambo patch from James Chaplin first patch: 1) Operation timeout - OperationTimeout timeout for non-responding receive operations. 2) Forced abend - ForceAbend method that will disconnect and reset state. 3) Optional folder lists - AvFolderList and AvSUBFolderList provide alternatives to FolderList and SUBFolderList that ensure the lists do not contain inacessible folders ( flagged by the server ). 4) Folder name fix - Provided a function to "fix" folder names before submission. Currently it fixes names containing spaces. second patch: 1) Capability - Ask for server capabilities/extensions. 2) Noop - Basic noop command - updates message counts as well - preferred alternative to status. 3) Status - Explicit status command - generally useful for status of a non-selected mailbox. 4) Fetch - Retrieve message data. 5) FetchBody - Retrieve the body of the message. 6) ExamineFolder - A read-only select command. 7) CloseSelectedFolder - Close the currently selected folder. 8) Idle - RFC2177 extension - not implemented on very many servers. 9) Search - Search based on RFC2066 criteria. 10) UIDSearch - Search based on RFC2066 criteria - results are in UID form. 11) UIDStoreFlags - Store message flags based on UID. 12) UIDFetch - Fetch message data by UID. 13) UIDCopyMessageToFolder - Copy a message by UID. 14) Authenticate - Basic framework. Only plain authentication extension implemented. 15) CloseOnError - A new property that allows the user to turn off the default behaviour of disconnecting from the server when an IMAP error is received 16) Namespace - RFC2342 Namespace query command. 17) ListFullHierarchy - Property which allows a switch between "*" ( default ) or "%" as the wilcard for default folder/list methods. 18) List - Explicit list command in case it is needed. third patch: 1) fix problem with imapd 2001a, reported by Holger Mauermann. 2) remove all warnings.3.5.1- revert change to the base64 encoding routine.3.5.2- changes from James Chaplin: 1) TSakIMAP will now properly process non-numeric UIDs for messages ( there was a sak_StrWord2Int transform being used before - which always produced a 0 value for non-numeric UIDs ). 2) TSakIMAP.RetrieveMessageExt ( private method ) was modified to provide a retrieval by either MsgID or UID. 3) TSakIMAP.RetrieveMessageByUID was modified to use the slightly more efficient TSakIMAP.RetrieveMessageExt(UID) method specified in 2) above. I also made an update to the SakMIME.pas unit. The changes that were implemented are: 1) sak_Base64Encode - a basic Base64 encoder. String input and string output with the option for CRLF splitting. 2) sak_Base64Decode - a basic Base64 decoder. String input and string output with a control for CRLF interpretation. 3) sak_Base64Verify - a very basic Base64 string verifier.3.5.3- robustify and code cleanups by Paul Vernon.3.5.4- access violation fix by Paul Vernon.3.5.5- go back to good old trusty 3.5.23.5.6- this time, all the cleanup & fixes from Paul Vernon seems to work well.3.6.0- Paul Vernon latest minor fixes- added basic SMTP authentication, by Delfi and Antonio Carlos Ribeiro Faria3.6.1- fix a mayor bug when sending to many addresses (by sergio)3.7.0- add full support for html mails, by Paul Vernon. (The TAttachedFile now has an extra boolean property called embedded. This property lets you use the syntax in your HTML mails)- fix a weird typo for BCC fields- add Content-ID, by alejandro Castro- fix "_" characters in subject, regression fix.- cleanups all around, by Paul Vernon.- SMTP example updated to cope with html emails.**warning** from this version, the html part of mails will not be stored as attachments by default, if you want this behavior, you just do something like: aSakMsg := TSakMsg.Create( self); aSakMsg.HTMLAsAttachment := true; ...3.7.1- fix TSakMsg.PopulateList (Jalin)3.7.2 (codenamed "melissa")- fixed a bug when the Populatelist procedure got re-written in sakMsg. It wasn‘t populating the SendTo field if there was only one e-mail address... (Paul Vernon)3.7.3 - Congratulations to Sergio on the addition to his family. This release was made by Paul Vernon who has temporarily taken over the release functions for the SakMail components whilst Sergio spends time AFK!- The 3.7.2 bug fix added blank entries to the address lists. The PopulateList procedure has been re-written again to hopefully cope with any type of e-mail address formatting.- The SMTP example noted in 3.7.0 actually shipped with this release!3.7.4- Bugfix for detecting UUEncoded mails correctly. Previous versions processed MIME mails with the value ‘begin xyz‘ if it appeared at the beginning of a line as a UUEncoded mail when they should not have.- POP and SMTP connect procedures are now functions. Existing code is unaffected. However, you can now use the following code if (sakPOP.Connect) then begin end;- POP gracefully quits if it receives an error now by calling Disconnect correctly.3.7.5- Further code to improve identification of UUEncoded mails. Essentially looking for the end as well as the beginning to ensure that it is correct.- Code optimisation of certain UUEncoded mail id functions.- Fix to ensure that the body of a mail that is UUEncoded is not lost.- MIME-Version string introduced into TsakMsg component to help with UUEncoded mail identification.- SizeInBytes property altered to read private variable using a function. If the private variable is 0, the function reads the length of the FRawMail.Text property.- Fix to make sure that the filename is not overwritten by a blank value when parsing mail-headers.3.7.6- Fixed list index out of bounds error.- Added POP3 RSET call TSakPOP.Reset.3.7.7- Altered SizeInBytes and Octets values to return server-side size when d/l headers only and use actual size once the entire message is downloaded.- Fixed a bug in GetBasicHeaders where To and CC fields could be mishandled if the mail headers were formed in a particular way.4.0.0 beta- All methods are now wrapped in classes. sak_util is now included for backwards compatibility only.- Several changes to make sakMail thread safe including the introduction of Mutexes which are cross process safe. Critical sections were an option however, although mutexes are a little slower, they are much more effective when you aren‘t sure how the code is going to be deployed...- Made several changes to the way connections are tracked, now making better use of the underlying Delphi components own properties and functions.- Several bug fixes included from solutions posted on mailing lists. Including change to datetime function to respect local time separator. There are more including one that Adem re-raised.- Removed almost all pointers as per Adems suggestion. Makes for neater code.- Hopefully backwards compatibility is kept. This is one of the objectives of the excersice although, internally, the components no longer use any of the non-object based methods. Also some of the non-object based methods actually have been re-written to create an object use the instance of the original method and then destroy the object again. This introduces a minor overhead however, because the objects are discreet, the trade is for much better memory usage and greater thread safety.- Introduced an include file to define compiler directives. Currently there are two directives. One defines whether to use the VCL or not, the other defines whether or not to use the FastStrings components. - With the intoduction of the Include file, this allows the development of code that is optional for users. One of these such changed is the use of the FastStrings base64 decoder. If you install the FastStrings components and turn on the compiler directive, you should have no functional changes however, the base64 decoder routines should have a much higher performance rating. Tests clock in at over 2000% faster attachment decoding on a P4 1.8GHz machine. (1.2Mb file 1686mS native sak Base64 Decoder, 79mS using FastStrings!)- This version is being released as a beta as the changes are pretty drastic. If the code is deemed to be stable and backwards compatible then it will be re-released as v4.0.1 with no changes.4.0.1 beta- Fixed an issue where Range Checking highlighted that the Attachment b64 decode routine raise a Range Error if the line that was to be decoded was empty. i.e. ‘‘.- Introduced a compiler directive to turn off range checking in the sakMIME procedure TBase64DecodingStream.Write to make sure that it runs correctly as Range Checking causes issues in this function.4.0.2 beta- Changed MailDateToDateTime function to the one provided by DengZhaoHui with a few modifications as even though it has better date processing than the original it caused EConvertErrors with some non-rfc dates.- Added the compiler directive to allow the inclusion of MD5 components from the DCPCrypt suite of encryption components. This allows the components to do APOP and SMTP AUTH functions as specified in RFCs 2095, 2104, 2449 and 2554. {UseDCP} ***** NOTE: These functions are experimental as although they are RFC compliant, they have not been tested against a secure mail server yet... *****- Using EurekaLog during load testing of the POP mail component, found and fixed several AV‘s in sakMSG, sakMIME and sakPOP. Mainly simple mistakes that required re-ordering of code or more checks before trying to manipulate data.- Altered the sockets code to be more stable with some servers. The previous implementation was totally incompatible with SendMail NT v3.0.2.- Fix added to compensate for incorrect operation of Connected property in some versions of Delphi.- Altered GetMultiLineFieldBody as per Adems suggestion. Also took some of Adems code and added it to GetFieldValueFromLine as the escape characters can appear in single line headers as well as multi-line ones.- TClientSocket is deprecated in Delphi 7. This may be the next large change in the sakEmail components. - Updated distribution to include more RFC‘s regarding the message format, POP and IMAP and hashing functions for CRAM mechanisms.- Fixed the handling of redirected mails as created by Eudora.- Force PopulateList to clear the list before populating it again.- Created a Delphi 6 package file.4.0.3 - Fixed AUTHSMTP buffer initialisation error. (Dmitry G. Kozhinov and Gabi Slonto)- Improved identification of servers that do not support the UIDL command. A small overhead is intorduced on servers that do support the command and have several mails to download but the feature allows better interaction with those servers that do not support UIDL.- Priority is now reported correctly when an e-mail is being decoded rather than only being used when sending an e-mail.4.0.4- Fixed an issue with a malformed header in a mail sent from MS Word through an Exchange server- Added a couple of try...finally blocks to the sakIMAP component.- Altered the sakIMAP components connected function to mirror the more accurate sakPOP method.- Consolidated all compiler directives into sakDef.inc- Added versioning compiler directives to allow the compilation of sakemail under Delphi 4.- General tidying of code. 4.0.5- Created a Delphi 7 package- Added properties to the IMAP component to allow read access to the LocalAddr and LocalHost socket properties.- Bugfix to sakMsg PopulateList function where a comma separated list did not contain any spaces- Access violation in sakPOP component due to incorrect use of free,freeandnil and compiler directives4.0.6- Added several features to the IMAP components.- Tidied up SMTP authentication routines (Improved use of MD5 for authentication using DCP components)- Included capability to send messages without an SMTP server (using Indy DNS components for MX lookups)- Bugfix in message parsing to stop a recursion loop due to a malformed mail.4.0.7- Memory leaks found by Amos and Paul regarding the sakMsg and sakPOP units respectively.- Bug fixes to attachment save code including stripping out invalid .. sequences from filenames- Improved the GetConnectedState method to check against the RemoteHost value on the Socket.- Updated POP example to be more responsive when downloading mail. Fixed a memory leak.Don‘t forget to subscribe to the mailing list (see the web pages at http://groups.yahoo.com/group/sakemail/)

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧