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

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


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


"ЧАВО от клуба программистов ВесельчакУ"
Доброго времени суток, уважаемые подписчики!

Как видите, я стараюсь учитывать все Ваши пожелания касательно оформления этой странички - спасибо всем кто присылал мне письма с замечаниями! Обещаю, что сделаю всё возможное для того, чтобы получать эту страничку Вам было приятно!
В месте моей текущей деятельности долгое время не было прямого выхода в инет, а брэндмауэр разрешал доступ лишь к корпоративным сайтам... В то нелёгкое время я утолял свой информационный голод подписываясь на нужные мне рассылки ))) Думаю, что и сейчас найдутся люди которые испытывают подобные затруднения... Мне бы хотелось чтобы у них создавалась илюзия, что вместе с этой страничкой к ним приходит "маленький кусочек" нашего клуба "ВесельчакУ", с его обитателями, их вопросами и ответами. Ого как меня несёт :-)) Поэтому я сам, как никто другой, понимаю какую пользу может принести хорошая рассылка! А чтобы она таковой была, я буду заботиться пржде всего о стабильности выпусков и при этом стараться учитывать Ваши пожелания! Это моё виденье и понимание рассылки. Критиковать здесь.
Я полчуил письмо, в котором меня просят готовить отдельно текстовый вариант рассылки. К сожалению сейчас я не могу выполнить эту просьбу, ибо на вёрстку текстового варианта пока нет не времени не сил ((( , но когда дизайн html-версии окончательно устаканится - постараюсь решить и эту проблему. В любом случае - это всего лишь вопрос времени!
А теперь я с радостью представляю Вам очердную "горячую десятку" ЧАВОШЕК от клуба программистов "ВесельчакУ".
На этом позвольте откланяться и пожелать Вам лёгкой рабочей недели.

Release.
>>
-Новое из раздела Новичкам

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

>>
-Новое из раздела NET
Как сделать чтоб форму можно было таскать мышкой уцепившись за любое место?

//переменные класса
private bool isDragging = false;
private Point oldPos;
//в конструкторе
this.MouseDown += new MouseEventHandler(MyForm_MouseDown);
this.MouseMove += new MouseEventHandler(MyForm_MouseMove);
this.MouseUp += new MouseEventHandler(MyForm_MouseUp);
//методы
private void MyForm_MouseDown(object sender, MouseEventArgs e)
{
this.isDragging = true;
this.oldPos = new Point();
this.oldPos.X = e.X;
this.oldPos.Y = e.Y;
}
private void MyForm_MouseMove(object sender, MouseEventArgs e)
{
if(this.isDragging)
{
Point tmp = new Point(this.Location.X, this.Location.Y);
tmp.X += e.X - this.oldPos.X;
tmp.Y += e.Y - this.oldPos.Y;
this.Location = tmp;
}
}
private void MyForm_MouseUp(object sender, MouseEventArgs e)
{
this.isDragging = false;
}

Последние обновление: 2004-01-24 20:58
Опубликовал: Громозека

Как сделать полупрозрачной Panel?

Если нужно чтобы было видно только изображение (не Control'ы), находящееся под ней, то достаточно у Panel'и выставить свойство BackColor в значение цвета, содержащее alpha-состовляющую в диапазоне 0 - 254. Вот пример установки наполовину прозрачного красного фона для кнопки:

button.BackColor = Color.FromArgb(125, Color.Red);

Только нужно иметь ввиду, что для того, чтобы Control поддерживал прозрачные цвета - у него должны быть выставлены стили ControlStyles.SupportsTransparentBackColor и ControlStyles.UserPaint. Например, у Button и Panel эти стили выставлены, а вот, например, у TextBox'а - нет.
Если же нужно, чтобы под панелью было видно не только нарисованное изображение, но и низлежащие 'сестринские' (имеющие того же родителя) control'ы - у нее при создании нужно выставить стиль WS_EX_TRANSPARENT, указывающий окну, что сперва должны прорисоваться низлежащие 'сестринские' окна:


class TransparentPanel: Panel
{
//Чтобы background не прорисовывался выставим флаг ControlStyles.Opaque:
public TransparentPanel()
{
SetStyle(ControlStyles.Opaque, true);
}
//И добавим к окну, при его создании, стиль WS_EX_TRANSPARENT:
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x00000020;
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= WS_EX_TRANSPARENT;
return createParams;
}
}
//Теперь, чтобы панель была видна как полупрозрачная, необходимо переопределить ее метод OnPaint
//и в нем закрашивать нужную облаcть цветом с alpha-составляющей:
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Green)),
0, 0, Width, Height);
}
//При перемещении такой 'прозрачной' панели (например, при установке свойства Control.Location)
//можно заметить, что она, перемещаясь на новое место, остается с тем же background'ом,
//что и на прежнем месте. Так происходит потому, что низлежащие окна не перерисовываются
//в тех новых координатах, в которых находится наша Panel после перемещения, поэтому их нужно заставить обновиться:
protected override void OnMove(EventArgs e)
{
if (Parent != null)
Parent.Invalidate(Bounds, true);
}
}


Вот форма-пример, демонстрирующая возможности рассмотренной выше
TransparentLabel:


class TransparentPanelDemo: Form
{
TransparentPanel panel;
public TransparentPanelDemo()
{
panel = new TransparentPanel();
panel.Size = new Size(50, 50);
Button btMove1 = new Button();
btMove1.Text = "Move 1";
btMove1.Click += new EventHandler(OnButton1Click);
Button btMove2 = new Button();
btMove2.Left = btMove1.Right * 2;
btMove2.Text = "Move 2";
btMove2.Click += new EventHandler(OnButton2Click);
Label lblText = new Label();
lblText.AutoSize = true;
lblText.Text = "label1";
lblText.ForeColor = Color.Red;
lblText.Top = btMove1.Bottom;
Controls.AddRange(new Control[] {panel, btMove1, btMove2, lblText});
}
void OnButton1Click(object sender, EventArgs e)
{
panel.Left= ((Control)sender).Right * 2;
}
void OnButton2Click(object sender, EventArgs e)
{
panel.Left = 0;
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillEllipse(Brushes.Yellow, 20, 20, 100, 100);
}

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

Обратите внимание, что TransparentPanel находится на вершине Z-порядка (она первой добавляется в коллекцию Controls формы).

Последние обновление: 2004-01-24 21:01
Опубликовал: Громозека

Как реализовать панель, принимающую фокус?

Нужно сделать класс-наследник Panel'и, в конструкторе которого выставить в true стиль ControlStyles.Selectable. Для того, чтобы у Panel'и появлялся border, при нахождении фокуса в ней, нужно переопределить методы OnEnter и OnLostFocus и в них устанавливать/убирать бордер. В примере ниже показана такая панель, кнопка добавлена только для того, чтобы продемонстрировать использование TAB'а.
using System;
using System.Windows.Forms;
using System.Drawing;
class MyForm: Form
{
public MyForm()
{
FocusedPanel focusedPanel = new FocusedPanel();
Button button = new Button();
button.Top = focusedPanel.Bottom;
Controls.AddRange(new Control[]{focusedPanel, button});
}
static void Main()
{
Application.Run(new MyForm());
}
}
class FocusedPanel: Panel
{
public FocusedPanel()
{
SetStyle(ControlStyles.Selectable, true);
TabStop = true;
}
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
Borderstyle="BorderStyle.FixedSingle;"
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
Borderstyle="BorderStyle.None;"
}
}

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

>>

- Новое из раздела C/C++

Что такое перегрузка функций(functions overloading)?

Перегруженными функциями называются две или более функций с одинаковыми именами, но разными сигнатурами, объявленные в одной области видимости. Процесс выбора необходимой функции при вызове перегруженной функции называется разрешением перегрузки(overload resolution).

Под сигнатурой понимается информация о функции, которая участвует в процессе разрешения перегрузки и включает в себя: типы параметров и, если ф-я является членом класса,- cv-квалификаторы. В сигнатуру функции не входит тип возвращаемого значения. Более подробную информацию о возможных сигнатурах(для шаблонов, параметров-массивов, etc.) можно найти в [13.1]. Параграф [13.3] детально описывает разрешение перегрузки. Перегружены могут быть только функции.

Рассмотрим следующий код:


struct A
{
int foo(int);
};
struct B : public A
{
int foo(const char*);
};


Здесь функции A::foo и B::foo находятся в разных областях видимости и
ф-я B::foo скрывает A::foo(это поведение называется сокрытием имен(name hiding)).

Таким образом:


void f(B* pB)
{
pB->foo(0); // ошибка - B::foo(const char*) скрывает A::foo(int)
pB->A::foo(0); // OK, вызов A::foo
pB->f("abcde"); // OK, вызов B::foo
}


Если немного модифицировать класс B, следующим образом:


struct B : public A
{
using A::foo;
int foo(const char*);
};

то вызов pB->foo(0) в ф-ии f(см. выше) будет удачным.

Последние обновление: 2004-01-31 23:10
Опубликовал: NetRaider

Как сделать, чтобы программма на ВСВ6 не требовала .bpl и .dll?

Перед компиляцией прграммы надо зайти на Project->Options, затем на вкладке Compiler нажать кнопку "Release", на вкладке Packages снять галку с "Build with runtime packages" и на вкладке Linker снять галку с "Use dynamic RTL". Желаю успехов, Sergvs.

Последние обновление: 2004-01-31 23:09
Опубликовал: Sergvs

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

Можно пpимеp получить, как копиpовать файлы?

Можно так:

procedure CopyFile(const FileName, DestName: TFileName);
var
CopyBuffer: Pointer; { buffer for copying }
TimeStamp, BytesCopied: Longint;
Source, Dest: Integer; { handles }
Destination: TFileName; { holder for expanded destination name }
const
ChunkSize: Longint = 8192; { copy in 8K chunks }
begin
Destination := ExpandFileName(DestName); { expand the destination path }
if HasAttr(Destination, faDirectory) then { if destination is a directory...
}
Destination := Destination + + ExtractFileName(FileName); { ...clone
file name }
TimeStamp := FileAge(FileName); { get sources time stamp }
GetMem(CopyBuffer, ChunkSize); { allocate the buffer }
try
Source := FileOpen(FileName, fmShareDenyWrite); { open source file }
if Source

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

Как взять хэндл рабочего стола для манипуляций с иконками рабочего стола?

Рабочий стол перекрыт сверху компонентом ListView.
Вам просто необходимо взять хэндл этого органа управления. Пример:

function GetDesktopListViewHandle: THandle;
var
S: String;
begin
Result := FindWindow(ProgMan, nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) SysListView32 then Result := 0;
end;

После того, как Вы взяли тот хэндл, Вы можете использовать API этого ListView,
определенный в модуле CommCtrl, для того, чтобы манипулировать рабочим столом.
Смотрите тему "LVM_xxxx messages" в оперативной справке по Win32.

К примеру, следующая строка кода:

SendMessage( GetDesktopListViewHandle, LVM_ALIGN, LVA_ALIGNLEFT, 0 );

разместит иконки рабочего стола по левой стороне рабочего стола Windows.

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

Как мне отправить на принтер чистый поток данных?

Под Win16 Вы можете использовать функцию SpoolFile, или
Passthrough escape, если принтер поддерживает последнее.
Под Win32 Вы можете использовать WritePrinter.

иже пример открытия принтера и записи чистого потока данных в принтер.
Учтите, что Вы должны передать корректное имя принтера, такое, как "HP LaserJet
5MP",
чтобы функция сработала успешно.

Конечно, Вы можете включать в поток данных любые необходимые управляющие коды,
которые могут потребоваться.

uses WinSpool;

procedure WriteRawStringToPrinter(PrinterName:String; S:String);
var
Handle: THandle;
N: DWORD;
DocInfo1: TDocInfo1;
begin
if not OpenPrinter(PChar(PrinterName), Handle, nil) then
begin
ShowMessage(error + IntToStr(GetLastError));
Exit;
end;
with DocInfo1 do begin
pDocName := PChar(test doc);
pOutputFile := nil;
pDataType := RAW;
end;
StartDocPrinter(Handle, 1, @DocInfo1);
StartPagePrinter(Handle);
WritePrinter(Handle, PChar(S), Length(S), N);
EndPagePrinter(Handle);
EndDocPrinter(Handle);
ClosePrinter(Handle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WriteRawStringToPrinter(HP, Test This);
end;

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

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

Как скрыть программу из [Ctrl] + [Alt] + [Del]?

Попробуй app.taskvisible=false.

Если не прокатит, то:

Const RSP_SIMPLE_SERVICE = 1
Const RSP_UNREGISTER_SERVICE = 0
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As
Long, ByVal dwType As Long) As Long
Public Sub MakeMeService()
Dim pid As Long, reserv As Long
'Get the current process ID
pid = GetCurrentProcessId()
'Register as service
regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
End Sub
Public Sub UnMakeMeService()
Dim pid As Long, reserv As Long
'Get the current process ID
pid = GetCurrentProcessId()
'Unregister as service
regserv = RegisterServiceProcess(pid, RSP_UNREGISTER_SERVICE)
End Sub
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
MakeMeService
'Right now, you're program is hidden from the CTRL-ALT-DEL-list
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnMakeMeService
End Sub

Хвастунов Михаил

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

Как узнать версию Windows средствами VB?


Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA"
(lpVersionInformation As OSVERSIONINFO) As Long
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Sub Form_Load()
Dim OSInfo As OSVERSIONINFO, PId As String
'KPD-Team 1998
'URL: http://www.allapi.net/
'KPDTeam@Allapi.net
'Set the graphical mode to persistent
Me.AutoRedraw = True
'Set the structure size
OSInfo.dwOSVersionInfoSize = Len(OSInfo)
'Get the Windows version
Ret& = GetVersionEx(OSInfo)
'Chack for errors
If Ret& = 0 Then MsgBox "Error Getting Version Information": Exit Sub
'Print the information to the form
Select Case OSInfo.dwPlatformId
Case 0
PId = "Windows 32s "
Case 1
PId = "Windows 95/98"
Case 2
PId = "Windows NT "
End Select
Print "OS: " + PId
Print "Win version:" + str$(OSInfo.dwMajorVersion) + "." +
LTrim(str(OSInfo.dwMinorVersion))
Print "Build: " + str(OSInfo.dwBuildNumber)
End Sub

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

Как перевести Windows в ждущий/спящий режим средствами VB?


Private Const ANYSIZE_ARRAY = 1
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Type LUID
LowPart As Long
HighPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function SetSystemPowerState Lib "kernel32" (ByVal fSuspend As Long,
ByVal fForce As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As
Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias
"LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid
As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As
Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal
BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
'set the shut down privilege for the current application
Private Sub EnableShutDown()
Dim hProc As Long
Dim hToken As Long
Dim mLUID As LUID
Dim mPriv As TOKEN_PRIVILEGES
Dim mNewPriv As TOKEN_PRIVILEGES
hProc = GetCurrentProcess()
OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
LookupPrivilegeValue "", "S"SeShutdownPrivilege", mLUID
mPriv.PrivilegeCount = 1
mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
mPriv.Privileges(0).pLuid = mLUID
' enable shutdown privilege for the current application
AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount),
mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
End Sub
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'enable the shutdown privilege
EnableShutDown
'on Windows2000: hibernate
'on Windows9x/ME: suspend
SetSystemPowerState False, False
End Sub

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

>>
-Новое из раздела ОС - Windows
Обновлений нет
>>
Новое из раздела WEB

Необходимо дать возможность посетителям смотреть видеоклипы на сайте. Что для этого нужно? Можно только обойтись аплетом или нужен еще ActiveX элемент? Что посоветуете и где можно взять? Клипы в формате AVI.

Выложи на сайте клипы в формате потокового видео. Клипы в формате AVI выложить никак нельзя. Чтобы посмотреть клип в таком формате, пользователь обязан скачать его к себе целиком.

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

Можно ли как-нибудь уменьшить трафик своего сайта?

Конечно. Попробуйте оптимизировать всю графику на вашем сайте. Многие файлы графических форматов смотрятся не намного хуже с меньшим количеством цветов. Не дублируйте графические файлы, пусть броузер кэширует их. Попробуйте очистить код HTML ваших страниц, используя относительные пути, короткие имена файлов, уберите лишние пробелы и переводы строк. Использование модуля gzip также позволит существенно уменьшить трафик.
По материалам http://www.hostobzor.ru

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

Как определиться с необходимым трафиком сайта?

Умножить средний размер страницы (включая графику и другие включаемые файлы!!!) на предполагаемое количество визитов за месяц. Например, при среднем размере страницы в 50Kb и прогнозируемом количестве загрузок 2000 в день получится 3Гб в месяц. В этом случае, Вам необходимо выбрать тарифный план с ограничением по трафику не менее 4-5Гб, чтобы предупредить возможные всплески популярности Вашего ресурса.
Уточнение от провайдера Мир профессионального хостинга Не учтено еще кеширование разных уровней. Большинство (до70%) информации с сервера кешируется как в компьютере пользователя, так и по пути от сервера. Реальный трафик обычно получается раза в 3 меньше.
По материалам http://www.hostobzor.ru

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

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

 


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

В избранное