亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? photospane.cs

?? 這是一個小型的相片管理器
?? CS
?? 第 1 頁 / 共 4 頁
字號:


using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using VirtualPhotoOrganizer.Photo;
using VirtualPhotoOrganizer.Util;
using TXML;

namespace VirtualPhotoOrganizer.Controls
{
	/// <summary>
	/// main component used for displaying an album's thumbnails
	/// </summary>
	internal class PhotosPane : System.Windows.Forms.UserControl
	{
		// the album, we're currently browsing
		private Album _Album;

		// our events
		public delegate void ProgressUpdate(int progress, int max, string desc);
		public event ProgressUpdate OnProgressUpdate;
		public delegate void SelectionChanged(Photos selPhotos);
		public event SelectionChanged SelectedPhotosChanged;
		public delegate void AlbumLoad(int photos);
		public event AlbumLoad AlbumLoaded;
		public delegate void PhotoDelete(int photosCount);
		public event PhotoDelete PhotosDeleted;

		// selected photos
		private Photos SelPhotos;
		private bool Deleting = false;

		// language strings
		private string LsNoPhoto;
		private string LsLThumb;
		private string LsDeleteQ;
		private string LsDel;
		private string LsRot;
		private string LsNoAlbumSave;
		private string LsPixels;
		private string LsArrChroErr;

		// settings
		private int PSaverQ = 100;
		private int ThumbWidth = 150;
		private int ThumbHeight = 113;
		private bool ShowImgRes = true;

		// indicated if we're currently editing a photo's title
		private bool Editing = false;

		// temp storage for a photo's title during editing
		private string TitleBuffer;

		// the graphics object needed for previewing the drag&drop destination
		private Graphics GlvPhotos;

		// the distance between two items - needed for locating the destIndex for a drag&drop operation
		private int ItemOffset;

		// the current mouse pos
		private Point MousePos;

		// the index of the item the mouse is currently hovering over
		private int CurrItemIndex;

		// the pen needed for previewing drag&drop
		private Pen PPrev;

		// indicates whether Ctrl has been pressed or not
		private bool CtrlDown = false;

		// import the method necessary for scrolling during dd
		[DllImport("User32.dll")]
		public extern static int SendMessage(IntPtr hwnd, uint message, int wparam, int lparam);

		// import the methods necessary for setting the scroll bar to the correct position after dd
		[DllImport("User32.dll")]
		public extern static bool GetScrollInfo(IntPtr hwnd, int fnBar, ref ScrollInfo lpsi);

		[DllImport("User32.dll")]
		public extern static int SetScrollInfo(IntPtr hwnd, int fnBar, ref ScrollInfo lpsi, bool fRedraw);

		public struct ScrollInfo
		{
			public uint cbSize;
			public uint fMask;
			public int nMin;
			public int nMax;
			public uint nPage;
			public int nPos;
			public int nTrackPos;
		}

		private System.Windows.Forms.ListView lvPhotos;
		private VirtualPhotoOrganizer.Controls.PaneTitle paneTitle;
		private System.Windows.Forms.ImageList ilThumbs;
		private System.Windows.Forms.ContextMenu contMenu;
		private System.Windows.Forms.MenuItem miOpen;
		private System.Windows.Forms.MenuItem miSlideSh;
		private System.Windows.Forms.MenuItem menuItem3;
		private System.Windows.Forms.MenuItem miRLeft;
		private System.Windows.Forms.MenuItem miRRight;
		private System.Windows.Forms.MenuItem menuItem6;
		private System.Windows.Forms.MenuItem miDel;
		private System.Windows.Forms.MenuItem miRen;
		private System.Windows.Forms.MenuItem menuItem9;
		private System.Windows.Forms.MenuItem miPInfo;
		private System.Windows.Forms.MenuItem miSelAll;
		private System.Windows.Forms.MenuItem miHTMLExp;
		private System.Windows.Forms.ToolTip ttPhotoInfo;
		private System.Windows.Forms.Timer timerToolTip;
		private System.Windows.Forms.MenuItem miPrint;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem miRenTime;
		private System.Windows.Forms.MenuItem miReoAZ;
		private System.Windows.Forms.MenuItem miReoZA;
		private System.Windows.Forms.MenuItem miReoChro;
		private System.Windows.Forms.MenuItem miRenReo;
		private System.Windows.Forms.MenuItem menuItem2;
		private System.Windows.Forms.MenuItem miCopy;
		private System.Windows.Forms.MenuItem miCut;
		private System.Windows.Forms.MenuItem miPaste;
		private System.ComponentModel.IContainer components;

		public PhotosPane() {
			// Dieser Aufruf ist f黵 den Windows Form-Designer erforderlich.
			InitializeComponent();

//			LoadLanugageStrings();
//			LoadSettings();
			SelPhotos = new Photos();
			MousePos = new Point(0, 0);
			CurrItemIndex = -1;
			VPOClipboard.ClipboardChanged += new VirtualPhotoOrganizer.Photo.VPOClipboard.ChangedClipb(VPOClipboard_ClipboardChanged);
		}

		/// <summary> 
		/// Die verwendeten Ressourcen bereinigen.
		/// </summary>
		protected override void Dispose(bool disposing) {
			if (disposing) {
				if (components != null) {
					components.Dispose();
				}
			}
			base.Dispose(disposing);
		}

		#region ParseAlbum

		/// <summary>
		/// parses the _Album and adds each thumb to the lv
		/// </summary>
		private void ParseAlbum() {
			if (_Album != null) {
				// prevent lvPhotos from redrawing itself
				lvPhotos.BeginUpdate();

				paneTitle.Text = _Album.AlbumName;	// set the pane title to the album name
				ilThumbs.Images.Clear();	// clear the image list
				lvPhotos.Items.Clear();		// clear the photos lv
				int i = 0;
				int max = _Album.Photos.Count;
				Photos notFound = new Photos();	// the photos that cannot be found
				bool saveAlbum = false;			// do we have to save our album after?

				// add each photo to the il and to the lv
				foreach (Photo.Photo p in _Album.Photos) {
					try		// to add the thumbnail to the il and the lv
					{
						Image img = Bitmap.FromFile(p.Thumbnail);
						ilThumbs.Images.Add(img);
						lvPhotos.Items.Add(p.Title, i);
						p.Tag = ilThumbs.Images[i];
						img.Dispose();

						// if the timeTaken has not yet been saved in the album, get the time and set the saveAlbum var to true
						if (p.TimeTaken == "") {
							FileInfo fi = new FileInfo(p.Path);
							p.TimeTaken = fi.LastWriteTime.ToString();
							saveAlbum = true;
						}
					}
					catch {
						try {
							// create a new thumbnail and add that one
							Resizer r = new Resizer();
							r.CreateThumbnail(p.Path, p.Thumbnail);
							Image img = Bitmap.FromFile(p.Thumbnail);
							ilThumbs.Images.Add(img);
							img.Dispose();
							lvPhotos.Items.Add(p.Title, i);
							p.Tag = ilThumbs.Images[i];

							// if the timeTaken has not yet been saved in the album, get the time and set the saveAlbum var to true
							if (p.TimeTaken == "") {
								FileInfo fi = new FileInfo(p.Path);
								p.TimeTaken = fi.LastWriteTime.ToString();
								saveAlbum = true;
							}
						}
						catch {
							// inform the user that the photo doesn't exist and remove it from the album
							MessageBox.Show(LsNoPhoto, p.Path, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
							notFound.Add(p);
							max--;
							i--;
							saveAlbum = true;
						}
					}
					finally {
						OnProgressUpdate(++i, max, LsLThumb);
					}
				}

				// reset the status bar to its initial state
				OnProgressUpdate(0, 100, "");

				// fire the albumLoaded event
				AlbumLoaded(max);

				// remove each photo that was not found from the album
				foreach (Photo.Photo p in notFound)
					_Album.Photos.Remove(p);

				// save the album if necessarry
				if (saveAlbum == true) {
					try {
						_Album.SaveAlbum();
					}
					catch { }
				}

				// redraw lvPhotos and update the scrollInfo
				lvPhotos.EndUpdate();
				ScrollInfo si = new ScrollInfo();
				si.cbSize = (uint) Marshal.SizeOf(si);
				si.fMask = 0x0004;
				GetScrollInfo(lvPhotos.Handle, 0x1, ref si);
				while (si.nPos > si.nMin) {
					SendMessage(lvPhotos.Handle, 0x0115, 0, 0);
					GetScrollInfo(lvPhotos.Handle, 0x1, ref si);
				}

				// get the ItemOffset
				try { ItemOffset = (int) Math.Round((double) (lvPhotos.Items[1].Bounds.Left - lvPhotos.Items[0].Bounds.Right), 0); }
				catch { ItemOffset = 10; }
			}
		}

		/// <summary>
		/// reloads the photos (excl. the thumbs) after a drag&drop operation in rearranged order
		/// </summary>
		private void ReloadAlbum() {
			lvPhotos.BeginUpdate();
			lvPhotos.Items.Clear();
			int i = 0;
			foreach (Photo.Photo p in this.Album.Photos) {
				lvPhotos.Items.Add(p.Title, i);
				p.Tag = ilThumbs.Images[i];
				i++;
			}
			lvPhotos.EndUpdate();
		}

		public void ReloadAlbumName() {
			paneTitle.Text = _Album.AlbumName;
		}

		#endregion

		#region renaming & rearranging

		/// <summary>
		/// renames the photos according to their timeTaken
		/// </summary>
		private void RenamePhotosAccToTime() {
			DialogResult dlgRes = SaveAlbum(MessageBoxButtons.AbortRetryIgnore);
			switch (dlgRes) {
				case DialogResult.Abort: return;
				case DialogResult.Retry:
					RenamePhotosAccToTime();
					return;
					break;
				default:
					break;
			}

			if (SelPhotos.Count == 0) {
				foreach (Photo.Photo p in _Album.Photos) {
					p.Title = p.TimeTaken;
					lvPhotos.Items[_Album.Photos.IndexOf(p)].Text = p.Title;
				}
			} else {
				foreach (Photo.Photo p in SelPhotos) {
					p.Title = p.TimeTaken;
					lvPhotos.Items[_Album.Photos.IndexOf(p)].Text = p.Title;
				}
			}

			_Album.SaveAlbum();
		}

		/// <summary>
		/// rearranges the photos alphabetically (a->z)
		/// </summary>
		private void RearrangePhotosAZ() {
			// check if the album can be saved
			DialogResult dlgRes = SaveAlbum(MessageBoxButtons.AbortRetryIgnore);
			switch (dlgRes) {
				case DialogResult.Abort: return;
				case DialogResult.Retry:
					RearrangePhotosAZ();
					return;
					break;
				default:
					break;
			}

			int start;
			int w;
			Photo.Photo temp;
			for (int i = 0; i < _Album.Photos.Count; i++) {
				start = i + 1;
				while (start < _Album.Photos.Count) {
					w = _Album.Photos[i].CompareTo(_Album.Photos[start]);

					if (w > 0) {
						temp = _Album.Photos[i];
						_Album.Photos[i] = _Album.Photos[start];
						_Album.Photos[start] = temp;
					}
					start++;
				}
			}

			// update the il
			ImageCollection icTemp = new ImageCollection();
			foreach (Photo.Photo p in _Album.Photos)
				icTemp.Add((Image) p.Tag);
			ilThumbs.Images.Clear();
			foreach (Image i in icTemp)
				ilThumbs.Images.Add(i);

			// save the album and update the lv
			_Album.SaveAlbum();
			ReloadAlbum();
		}

		/// <summary>
		/// rearranges the photos alphabetically (z->a)
		/// </summary>
		private void RearrangePhotosZA() {
			// check if the album can be saved
			DialogResult dlgRes = SaveAlbum(MessageBoxButtons.AbortRetryIgnore);
			switch (dlgRes) {
				case DialogResult.Abort: return;
				case DialogResult.Retry:
					RearrangePhotosAZ();
					return;
					break;
				default:
					break;
			}

			int start;
			int w;
			Photo.Photo temp;
			for (int i = 0; i < _Album.Photos.Count; i++) {
				start = i + 1;
				while (start < _Album.Photos.Count) {
					w = _Album.Photos[i].CompareTo(_Album.Photos[start]);

					if (w < 0) {
						temp = _Album.Photos[i];
						_Album.Photos[i] = _Album.Photos[start];
						_Album.Photos[start] = temp;
					}
					start++;
				}
			}

			// update the il
			ImageCollection icTemp = new ImageCollection();
			foreach (Photo.Photo p in _Album.Photos)
				icTemp.Add((Image) p.Tag);
			ilThumbs.Images.Clear();
			foreach (Image i in icTemp)
				ilThumbs.Images.Add(i);

			// save the album and update the lv
			_Album.SaveAlbum();
			ReloadAlbum();
		}

		/// <summary>
		/// rearranges the photos in chronological order
		/// </summary>
		private void RearrangePhotosChro() {
			// check if the album can be saved
			DialogResult dlgRes = SaveAlbum(MessageBoxButtons.AbortRetryIgnore);
			switch (dlgRes) {
				case DialogResult.Abort: return;
				case DialogResult.Retry:
					RearrangePhotosAZ();
					return;
					break;
				default:
					break;
			}

			int start;
			int w;
			Photo.Photo temp;
			DateTime timeI, timeStart;
			for (int i = 0; i < _Album.Photos.Count; i++) {
				try { timeI = DateTime.Parse(_Album.Photos[i].TimeTaken); }
				catch {
					MessageBox.Show(LsArrChroErr, _Album.Photos[i].Title, MessageBoxButtons.OK, MessageBoxIcon.Error);
					_Album.SaveAlbum();
					ReloadAlbum();
					return;
				}

				start = i + 1;
				while (start < _Album.Photos.Count) {
					try { timeStart = DateTime.Parse(_Album.Photos[start].TimeTaken); }
					catch {
						MessageBox.Show(LsArrChroErr, _Album.Photos[start].Title, MessageBoxButtons.OK, MessageBoxIcon.Error);
						_Album.SaveAlbum();
						ReloadAlbum();
						return;
					}

					w = timeI.CompareTo(timeStart);

					if (w > 0) {
						temp = _Album.Photos[i];
						_Album.Photos[i] = _Album.Photos[start];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线三级电影| 91美女蜜桃在线| 精品乱人伦小说| 久草热8精品视频在线观看| 欧美电影免费观看高清完整版在线 | 国产一区二区三区四| 欧美大白屁股肥臀xxxxxx| 久久精品国产久精国产| 精品国产91洋老外米糕| yourporn久久国产精品| 亚洲激情欧美激情| 91精品国产综合久久精品app | 一本色道久久加勒比精品| 亚洲欧美日韩电影| 欧美精品久久99| 精品一区二区三区在线播放 | 欧美美女一区二区在线观看| 久久精品国产精品亚洲精品| 中文字幕二三区不卡| 在线观看精品一区| 蜜桃久久久久久| 亚洲欧洲日韩女同| 在线成人av网站| 成熟亚洲日本毛茸茸凸凹| 国产美女精品在线| 亚洲女性喷水在线观看一区| 91麻豆精品国产91| 成人开心网精品视频| 五月激情综合婷婷| 国产精品高清亚洲| 这里只有精品免费| 99久久婷婷国产综合精品电影| 婷婷亚洲久悠悠色悠在线播放 | 亚洲品质自拍视频网站| 日韩亚洲电影在线| 一本久久a久久精品亚洲| 美美哒免费高清在线观看视频一区二区| 中文字幕精品一区二区三区精品| 欧美日本国产一区| 成人黄色网址在线观看| 丝袜亚洲另类欧美| 一区二区三区在线观看动漫| 精品国产一区二区在线观看| 欧美在线影院一区二区| 国产91精品欧美| 老鸭窝一区二区久久精品| 一区二区三区四区不卡在线| 日本一区二区三区视频视频| 日韩视频一区二区三区在线播放| 色婷婷精品大在线视频| 成人h动漫精品一区二| 精品中文av资源站在线观看| 亚洲五月六月丁香激情| 中文字幕在线观看不卡| 久久精品一区二区三区四区| 欧美一区二区在线看| 在线精品观看国产| 日本韩国精品在线| 91在线国产福利| 成人av电影免费观看| 国产不卡在线视频| 极品少妇xxxx精品少妇| 免费成人av在线| 日韩高清不卡在线| 天堂久久一区二区三区| 亚洲伊人色欲综合网| 一区二区在线观看免费| 《视频一区视频二区| 国产精品卡一卡二| 国产精品乱码久久久久久| 国产日韩v精品一区二区| 精品入口麻豆88视频| 日韩免费看的电影| 精品日韩在线一区| 精品对白一区国产伦| 久久综合久久综合久久综合| 亚洲精品在线免费播放| 久久久午夜精品| 亚洲国产成人一区二区三区| 国产欧美精品在线观看| 国产欧美一区二区精品秋霞影院 | 欧美性猛片xxxx免费看久爱| 一本色道久久综合精品竹菊| 欧美中文字幕不卡| 欧美精品视频www在线观看| 91精品国产入口| 精品乱码亚洲一区二区不卡| 久久久久久免费网| 国产精品久久久久久久浪潮网站 | 韩国毛片一区二区三区| 国产精品1024久久| 91在线精品一区二区| 欧美日韩精品高清| 日韩欧美不卡在线观看视频| 久久亚洲二区三区| 国产精品久久久久影院老司| 亚洲视频在线一区观看| 亚洲成人午夜影院| 久久精品国产一区二区三区免费看| 精品在线一区二区三区| 成年人午夜久久久| 欧美欧美欧美欧美| 久久蜜臀精品av| 亚洲免费观看高清在线观看| 香蕉久久一区二区不卡无毒影院| 久久www免费人成看片高清| 成人黄色电影在线| 欧美一区日本一区韩国一区| 久久精品一区二区三区四区| 亚洲一区二区在线观看视频| 久久99精品国产.久久久久久 | 一本色道**综合亚洲精品蜜桃冫| 欧美精品一二三| 国产精品毛片无遮挡高清| 香蕉av福利精品导航| 激情久久久久久久久久久久久久久久| av成人老司机| 欧美一卡二卡在线| 国产精品国产馆在线真实露脸| 婷婷六月综合亚洲| 成人h动漫精品一区二区| 717成人午夜免费福利电影| 国产精品久久久久影视| 美女一区二区久久| 色欧美88888久久久久久影院| 欧美www视频| 亚洲一区二区三区在线播放| 国产一区二区三区免费看| 欧美日韩在线电影| 国产精品久久综合| 国精品**一区二区三区在线蜜桃| 日本久久电影网| 国产蜜臀97一区二区三区| 亚欧色一区w666天堂| 94-欧美-setu| 久久精品夜色噜噜亚洲a∨| 亚洲bt欧美bt精品777| 99精品视频一区二区三区| 久久久久久久免费视频了| 免费看欧美美女黄的网站| 欧美亚洲综合在线| 亚洲视频香蕉人妖| 成人污视频在线观看| 久久综合色播五月| 美女任你摸久久| 这里只有精品99re| 午夜精品久久久久久久99樱桃| 99久久精品免费看国产| 久久久久国产精品人| 麻豆精品蜜桃视频网站| 欧美主播一区二区三区| 亚洲欧美另类小说视频| 91亚洲男人天堂| 国产精品久久久久久久久免费樱桃 | 日韩精品电影一区亚洲| 在线免费精品视频| 尤物在线观看一区| 色悠久久久久综合欧美99| 国产精品第一页第二页第三页| 国产成人鲁色资源国产91色综| 精品免费99久久| 麻豆高清免费国产一区| 欧美xxxxx牲另类人与| 久久99深爱久久99精品| 日韩午夜电影在线观看| 久久91精品国产91久久小草| 欧美成人猛片aaaaaaa| 韩国女主播成人在线观看| 2020国产精品自拍| 国产麻豆视频一区二区| 久久精品水蜜桃av综合天堂| 国产一区二区在线影院| 国产日韩综合av| 97精品久久久午夜一区二区三区| 亚洲色图视频网| 欧美午夜精品一区二区蜜桃| 亚洲丰满少妇videoshd| 欧美一二三区在线观看| 狠狠久久亚洲欧美| 亚洲国产精品成人综合| 91在线精品秘密一区二区| 亚洲小少妇裸体bbw| 日韩一区二区免费在线电影 | 另类调教123区| 久久人人97超碰com| 播五月开心婷婷综合| 亚洲激情在线播放| 9191成人精品久久| 国产高清成人在线| 依依成人综合视频| 91精品在线一区二区| 国产高清成人在线| 亚洲激情图片小说视频| 欧美一级xxx| youjizz国产精品| 天天操天天干天天综合网| 久久综合九色综合欧美亚洲| www.色精品| 蜜臀91精品一区二区三区| 国产精品青草久久|