Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Фев
Связать ProgressBar + скорлинг в Texbox
Posted by obzor under .NET, си шарп
Как при скорлинге текста в Texbox, создать событие индикации прочитанного текста в ProgressBar.
Загружаю текст из файла. Затем начинаю его читать (скорлинг вниз) и в зависимости сколько текста было уже прочитано отображать в ProgressBar процесс.
public class MyTextBox : TextBox
{
public delegate void OnScrollEvent(object sender, int Min, int Max, int Pos);
public event OnScrollEvent OnScrollChanged;
public int VerticalScrollPosition
{
get { return GetScroll(WinApi.SB_VERT); }
}
private int GetScroll(int scrollBarMessage)
{
return WinApi.GetScrollPos((System.IntPtr)this.Handle, scrollBarMessage);
}
protected override void WndProc(ref System.Windows.Forms.Message message)
{
base.WndProc(ref message);
if (message.Msg == WinApi.WM_VSCROLL || message.Msg == WinApi.WM_HSCROLL || message.Msg == WinApi.WM_MOUSEWHEEL)
{
}
if (message.Msg == WinApi.WM_VSCROLL )
{
WinApi.SCROLLINFO info = new WinApi.SCROLLINFO();
info.cbSize = Marshal.SizeOf(info);
info.fMask = WinApi.ScrollInfoMask.SIF_ALL;
WinApi.GetScrollInfo(this.Handle, WinApi.SB_VERT, ref info);
OnScrollChanged?.Invoke(this, info.nMin, info.nMax, info.nPos);
}
}
}
public static class WinApi
{
public enum ScrollInfoMask : uint
{
SIF_RANGE = 0x1,
SIF_PAGE = 0x2,
SIF_POS = 0x4,
SIF_DISABLENOSCROLL = 0x8,
SIF_TRACKPOS = 0x10,
SIF_ALL = (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS),
}
public const uint WM_HSCROLL = 0x114;
public const uint WM_VSCROLL = 0x115;
public const uint WM_MOUSEWHEEL = 0x20A;
public const int SB_VERT = 0x1;
public const int SB_HORZ = 0x0;
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct SCROLLINFO
{
public int cbSize; // (uint) int is because of Marshal.SizeOf
public ScrollInfoMask fMask;
public int nMin;
public int nMax;
public uint nPage;
public int nPos;
public int nTrackPos;
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetScrollPos(System.IntPtr hWnd, int nBar, int nPos, bool bRedraw);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetScrollPos(System.IntPtr hWnd, int nBar);
[System.Runtime.InteropServices.DllImport("User32.Dll", EntryPoint = "PostMessageA")]
public static extern bool PostMessage(System.IntPtr hWnd, uint msg, int wParam, int lParam);
}
И не забываем в конструкторе прицепить обработчик события:
myTextBox1.OnScrollChanged += (ox, a, b, c) =>
{
this.BeginInvoke(new MethodInvoker(() =>
{
if (progressBar1.Minimum != a)
progressBar1.Minimum = a;
if (progressBar1.Maximum != b)
progressBar1.Maximum = b;
progressBar1.Step = 1;
progressBar1.Value = Math.Min(b, c);
}));
};
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)