Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listb   Найти похожие ветки 

 
^GENTLY^   (2004-06-06 20:18) [0]

Здравствуйте!!
У меня в программе устанавливается по нажатию на Button4 форма принимает опр вид,т.е. появляются сразу 3 кнопки свернуть восстановить закрыть.Подскажите пожулуйста как сделать чтоб было 3 buttona и по нажатию на какой- либо появлялось соответсвующая кнопка свернуть или закрыть илил восст. Т.е. button-свернуть нажали появился квадратик кнопка свернуть. и.т.д.
Это код программы, на всякий случай.
var
pos: TRect;
w : array[0..255] of char;
id: dword;
x,y,e,h: integer;
region: thandle;
{$R *.dfm}

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
Edit1.Text:=ListBox1.Items[listbox1.ItemIndex];
GetWindowRect(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),pos);
Edit2.Text:=IntToStr(pos.Left);
Edit3.Text:=IntToStr(pos.Top);
Edit4.Text:=IntToStr(pos.Right);
Edit5.Text:=IntToStr(pos.Bottom);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
SetWindowText(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),Pchar(Edit1.text));
ListBox1.Items[listbox1.ItemIndex]:=Edit1.Text;
x:=StrToInt(Edit2.Text);
y:=StrToInt(Edit3.Text);
e:=StrToInt(Edit4.Text);
h:=StrToInt(Edit5.Text);
SetWindowPos(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),0,x,y,(e-x),(h-y),0);
if RadioButton1.Checked=true then ShowWindow(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),SW_MINIMIZE);
if RadioButton2.Checked=true then ShowWindow(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),SW_Maximize);
if RadioButton3.Checked=true then begin end;
if CheckBox1.Checked=true then showwindow(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),sw_hide);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Listbox1.Clear;
id := FindWindowEx(0, 0, nil, nil);

while (id <> 0) do
 begin
if  (GetWindowText(id, w, 255) > 1)
      and (IsWindowVisible(id))
   then
     Form1.ListBox1.Items.Add(w);
   id := FindWindowEx(0, id, nil, nil)
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Listbox1.Clear;
id := FindWindowEx(0, 0, nil, nil);

while (id <> 0) do
 begin
   if  (GetWindowText(id, w, 255) > 1)
   and (IsWindowVisible(id))
   then
     Form1.ListBox1.Items.Add(w);
   id := FindWindowEx(0, id, nil, nil)
 end;
 end;

procedure TForm1.Button4Click(Sender: TObject);
begin
SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),GWL_STYLE,
               WS_OVERLAPPEDWINDOW or WS_CAPTION);
               form1.Hide;
               form1.Show;
end;


 
Kair ©   (2004-06-06 20:35) [1]

Крестик: ws_SysMenu;
Свернуть: ws_Minimize;
Восстановить: ws_Minimize; :)

P.S.: Развернуть: ws_Maximize


 
^GENTLY^   (2004-06-06 20:54) [2]

Работает только с кнопкой закрыть.А на остальные нет реакции.

begin
SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),GWL_STYLE,
WS_CAPTION or ws_SysMenu);

               form1.Hide;
               form1.Show;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),GWL_STYLE,
 WS_CAPTION or ws_Minimize);

               form1.Hide;
               form1.Show;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
 SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),GWL_STYLE,
WS_CAPTION or ws_Maximize);

               form1.Hide;
               form1.Show;
end;


 
Kair ©   (2004-06-07 06:23) [3]

Остальные кнопки работают только вместе с ws_SysMenu.
Т.е. ws_Caption or ws_SysMenu or ws_Minimize...
А по другому, вроде, никак.


 
wicked ©   (2004-06-07 10:58) [4]

добавлю также, что после изменения стиля окна желательно также делать ему SetWindowPos...


 
^GENTLY^   (2004-06-07 13:14) [5]

Ну вот делаю так,да
SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),GWL_STYLE,
 WS_CAPTION or  ws_Minimize and not ws_SysMenu and not ws_Maximize);
Но кнопочка свернуть всеравно не получается,а если еще и нажата закрыть то она пропадает.
Вообще во-первых и так почему-то не работает, а во-вторых получается ,если делать так, что может быть только 1 кнопочка либо свер либо зак ....
:(:(:(


 
Kair ©   (2004-06-07 17:58) [6]


> wicked ©   (07.06.04 10:58) [4]
> добавлю также, что после изменения стиля окна желательно
> также делать ему SetWindowPos...


Или ShowWindow(); :)


> ^GENTLY^   (07.06.04 13:14) [5]
> Ну вот делаю так,да
> SetWindowLong(FindWindow(nil,Pchar(ListBox1.Items[listbox1.ItemIndex])),GWL_STYLE,
>  WS_CAPTION or  ws_Minimize and not ws_SysMenu and not ws_Maximize);
> Но кнопочка свернуть всеравно не получается,а если еще и нажата закрыть то она пропадает.


Извиняюсь, забыл, не ws_Minimize, а ws_MinimizeBox :)

Не делай and not ws_SysMenu. Без крестика все-равно ведь две другие кнопки не покажутся...


 
wicked ©   (2004-06-07 21:29) [7]


> Или ShowWindow(); :)

не совсем... в msdn советуецца именно SetWindowPos...


 
Kair ©   (2004-06-08 06:07) [8]


> wicked ©   (07.06.04 21:29) [7]
>
> > Или ShowWindow(); :)
>
> не совсем... в msdn советуецца именно SetWindowPos...


Можно узнать почему?


 
wicked ©   (2004-06-08 11:25) [9]

> Можно узнать почему?
цитирую кусочек remarks-секции от SetWindowLong:
Certain window data is cached, so changes you make using SetWindowLong will not take effect until you call the SetWindowPos function. Specifically, if you change any of the frame styles, you must call SetWindowPos with the SWP_FRAMECHANGED flag for the cache to be updated properly.

а зачем именно?...
а затем, что SetWindowPos функция запускает механизм пересчета клиентской части окна, исполняя своего рода часть кода по созданию нового окна с определенными стилями...
например, см справку по WM_NCCALCSIZE....



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
14-1088532532
Гастарбайтэр
2004-06-29 22:08
2004.07.18
Может не в тему, но продается нотубук


8-1083590016
BlackTiger
2004-05-03 17:13
2004.07.18
Как повернуть Bitmap на определенный угол?


1-1088804549
killer
2004-07-03 01:42
2004.07.18
Transparent в CheckBox


1-1089024872
Zabludshiy
2004-07-05 14:54
2004.07.18
Вывести HTML документ без WebBrowser


1-1088794348
AndreyZ
2004-07-02 22:52
2004.07.18
Tedit, TMemo





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский