Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

ЧаВО от клуба программистов Весельчак У


Информационный Канал Subscribe.Ru


"ЧАВО от клуба программистов ВесельчакУ"
>>
-Новое из раздела Новичкам

Обновлений нет

>>
-Новое из раздела NET

private void Form1_Load(object sender, System.EventArgs e)
{
Point[] myArray =
{
new Point(this.Width / 2, 0),
new Point(this.Width, this.Height / 2),
new Point(this.Width * 2 / 3, this.Height),
new Point(this.Width * 1 / 3, this.Height),
new Point(0, this.Height / 2)
};
System.Drawing.Drawing2D.GraphicsPath myPath = new System.Drawing.Drawing2D.GraphicsPath();
myPath.AddPolygon(myArray);
this.Region = new Region(myPath);
}

Для изменения вида формы нужно изменить количество точек в массиве.

Последние обновление: 2004-01-28 12:09
Опубликовал: Dimyan

Как выполнить эмуляцию кликов мыши?

Можно использовать Win32 функции SendInput() или mouse_event(). В примере ниже, выполненном для простоты при помощи
mouse_event, эмулируется клик правой кнопкой мыши примерно в центре экрана:

//импортируем mouse_event():
[DllImport("User32.dll")]
static extern void mouse_event(MouseFlags dwFlags, int dx, int dy, int dwData, UIntPtr dwExtraInfo);
//для удобства использования создаем перечисление с необходимыми флагами (константами), которые определяют действия
мыши:
[Flags]
enum MouseFlags{Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008,
RightUp = 0x0010, Absolute = 0x8000};
//и использование - клик примерно в центре экрана(подробнее о координатах, передаваемых в mouse_event см. в MSDN):
const int x = 32000;
const int y = 32000;
mouse_event(MouseFlags.Absolute | MouseFlags.Move, x, y, 0, UIntPtr.Zero);
mouse_event(MouseFlags.Absolute | MouseFlags.RightDown, x, y, 0, UIntPtr.Zero);
mouse_event(MouseFlags.Absolute | MouseFlags.RightUp, x, y, 0, UIntPtr.Zero);


Также можно окну посылать сообщения WM_LBUTTONDOWN и WM_LBUTTONUP при помощи Win API функции SendMessage:


using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class MyForm: Form
{
//Кнопка, по которой будет эмулироваться клик
Button btDemo = new Button();
public MyForm()
{
btDemo.Click += new EventHandler(OnBtDemoClick);
Button btPerformClick = new Button();
btPerformClick.Text = "Click!";
btPerformClick.Click += new EventHandler(OnBtPerformClick);
btPerformClick.Left = btDemo.Right;
Controls.AddRange(new Control[]{btDemo, btPerformClick});
}

void OnBtDemoClick(object sender, EventArgs e)
{
MessageBox.Show("Button clicked");
}

void OnBtPerformClick(object sender, EventArgs e)
{
SendMessage(btDemo.Handle, Messages.WM_LBUTTONDOWN, MK_LBUTTON, IntPtr.Zero);
SendMessage(btDemo.Handle, Messages.WM_LBUTTONUP, MK_LBUTTON, IntPtr.Zero);
}

static void Main()
{
Application.Run(new MyForm());
}

enum Messages{WM_LBUTTONDOWN = 0x0201, WM_LBUTTONUP = 0x0202};
const int MK_LBUTTON = 0x0001;
[DllImport("User32.dll")]
static extern int SendMessage(IntPtr hWnd, Messages uMsg, int wParam, IntPtr lParam);
}

Последние обновление: 2004-01-28 12:15
Опубликовал: Dimyan

Как сделать, чтобы программа сама нажимала клавиши?

Используйте методы Send() или SendWait() класса SendKeys. Эти методы посылают "нажатия клавиш" в окно имеющее фокус в активном приложении, следовательно - нужное приложение нужно сделать активным до использования SendX методов. Для того чтобы найти нужное окно можно воспользоваться Win32 API функциями типа FindWindow/EnumWindows и SetForegroundWindow.
В этом примере запускается экземпляр notepad'a и в его (или другого найденного экземпляра - для этого примера неважно) текстовое окно посылается текст:

class SendKeysDemo
{
static void Main()
{
//Запускаем notepad Process process = Process.Start("notepad.exe");
//Ждем пока приложение закончит инициализацию process.WaitForInputIdle();
//Находим окно Notepad'a, необязательно только-что запущенного.
//Понятно, что если бы нам нужно было именно окно запущенного нами
//приложения - можно воспользоваться свойством process.MainWindowHandle
//но одна из целей примера - продемонстрировать использование FindWindow
IntPtr hWndNotepad = FindWindow("Notepad", null);
//Делаем найденное окно активным
SetForegroundWindow(hWndNotepad);
//Посылаем строку
SendKeys.SendWait("Hello from GotDotNet.ru !!!");
}
//Экспортируем нужные Win32 функции
[DllImport("User32.dll")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll")]
static extern int SetForegroundWindow(IntPtr hWnd);
}

Обратите внимание, что в этом примере используется SendKeys.SendWait(), а не Send() - это потому, что Send() можно использовать только из потока, имеющего очередь сообщений. Если нужно "нажать" клавишу совместно с каким-то модификатором, например эмулировать вставку из clipboard'a (CTRL+V) используйте строку
^V
Значения для других модификаторов можно найти в справке по SendKeys.Send().


Последние обновление: 2004-01-28 12:34
Опубликовал: Dimyan

>>
-Новое из раздела C/C++
Обновлений нет
>>
- Новое из раздела Delphi


Как я могу использовать анимированный курсор?


Сперва Вы должны взять хэндл курсора Windows и присвоить его одному из
элементов массива Cursors обьекта Screen.
Предопределенные курсоры имеют отрицательный индекс, а определенные
пользователем (Вами) курсоры получают положительные индексы.

иже пример формы, использующей анимированный курсор:

procedure TForm1.Button1Click(Sender: TObject);
var
h : THandle;
begin
h := LoadImage(0,
C:TheWallMagic.ani,
IMAGE_CURSOR,
0,
0,
LR_DEFAULTSIZE or
LR_LOADFROMFILE
);
if h = 0 then ShowMessage(Cursor not loaded)
else
begin
Screen.Cursors[1] := h;
Form1.Cursor := 1;
end;
end;

Последние обновление: 2004-01-25 19:59
Опубликовал: Александр


Как запретить кнопку Close [x] в заголовке окна.


Вот кусок, который делает все, что тебе нужно:

procedure TForm1.FormCreate(Sender: TObject);
var
Style: Longint;
begin
Style := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, Style And Not WS_SYSMENU);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_F4) and (ssAlt in Shift) then begin
MessageBeep(0);
Key := 0;
end;
end;

Последние обновление: 2004-01-25 20:00
Опубликовал: Александр

Как скопировать экран (или его часть) в TBitmap?

Например, с помощью WinAPI так -

var
bmp: TBitmap;
DC: HDC;

begin

bmp:=TBitmap.Create;

bmp.Height:=Screen.Height;
bmp.Width:=Screen.Width;

DC:=GetDC(0); //Дескpиптоp экpана

bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
DC, 0, 0, SRCCOPY);

bmp.SaveToFile(Screen.bmp);

ReleaseDC(0, DC);
end;

Последние обновление: 2004-01-25 20:00
Опубликовал: Александр

>>
-Новое из раздела Visual Basic


Как посчитать, сколько дней прошло между двумя датами?


Dim d1 As Date, d2 As Date, lDays As Long
d1 = CDate("01/01/100")
d2 = CDate("24/03/1978")
lDays = DateDiff("d", d1, d2)
Ну и назад:
d2 = DateAdd("D", lDays, d1)

Последние обновление: 2004-01-31 13:33
Опубликовал: из архива


Как в VB можно вставить в приложение несколько иконок?


Добавь файл ресурсов, вставь иконки в него.

Последние обновление: 2004-01-31 13:38
Опубликовал: из архива


Как сделать так, что бы текущий указатель в MsFlexGrid встал на данную строку/столбец?


Просто mygrid.row=XXX конечно ставит, но пользователь этого не видит! А у меня он большой (вертикально) — хотелось бы что бы менялся на форме для пользователя, встав на нужное место.
grid.TopRow = XXX

>>
-Новое из раздела ОС - Windows

Где лежат присоединённые файлы (attachments), приходящие по почте?
(Хочу просканировать антивирусом, достать файл, удалить и т.п.)

Зависит от вашего почтового клиента. Кроме того, эту директорию во всех клиентах можно перемещать в произвольное место. Также есть зависимость от того, куда показывает линк "My Documents" (для Outlook, Outlook Express)

1. Outlook: аттачи хранятся по умолчанию в "C:\Documents and Settings\\Application Data\Microsoft\Outlook" . Им я пользуюсь только для внутренней корреспонденции (и вам советую)

2. Outlook Express: "C:\Documents and Settings\\Application Data\Microsoft\Outlook Express". Про экпресс мог соврать - я его вынес сов всех машин, до которых дотянулся. И вам советую.

3. The Bat! : аттачи лежат по умолчанию

"C:\Program Files\The Bat!\MAIL\\"

4. Mozilla, Opera, etc. Вы должны знать, раз поставили :-). Но смысл примерно тот же: найдите и проверьте директорию с почтой, там будет поддиректория с аттачами.

Последние обновление: 2004-02-11 17:15
Опубликовал: grozny

>>
Новое из раздела WEB

Обновлений нет

>>
-Новое из раздела Базы данных 
Обновлений нет
>>
-Новое из раздела Разное
Обновлений нет

 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное