Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.04.2014, 10:57
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию зафиксировать место для формы

Здравствуйте не знаю как правельно обяснить что мнке нужно ?
У меня форма находитса над понелью задачь и мне нужно чтоб другие программы при открытии на весь экран не перекрывала мою форму тоесть как на картинке.
Изображения
Тип файла: jpg 1_640x602_600x500.jpg (77.6 Кбайт, 33 просмотров)
Ответить с цитированием
  #2  
Старый 25.04.2014, 13:10
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gudzik11
У меня форма находитса над понелью задачь и мне нужно чтоб другие программы при открытии на весь экран не перекрывала мою форму тоесть как на картинке.
Тебе нужно делать своё приложение в виде "Панели инструментов рабочего стола"
Вот >здесь< уже готовый модуль AppBar.pas на Delphi (смотри в архиве демку в папке DemoApp)
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Gudzik11 (25.04.2014)
  #3  
Старый 25.04.2014, 16:57
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Спасибо! То что нужно .
Ответить с цитированием
  #4  
Старый 25.04.2014, 19:38
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Подскажите как пне сразу установить панель в нижний край экрана и запретить передвижение мышкой.
я просто ешё долго буду разбирать этот модуль
Ответить с цитированием
  #5  
Старый 25.04.2014, 22:58
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gudzik11
Подскажите как пне сразу установить панель в нижний край экрана и запретить передвижение мышкой.
Чтобы создавалась сразу снизу - делаешь на событии OnCreate формы:
Код:
1
2
3
4
procedure TDemoBar.FormCreate(Sender: TObject);
begin
  Edge := abeBottom;
end;
Чтобы нельзя было мышкой перемещать или менять размер - проще всего перехватывать сообщение WM_NCHITTEST:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
type
  TDemoBar = class(TAppBar)
.....
  protected
    procedure OnNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
  end;
.....
implementation
.....
procedure TDemoBar.OnNCHitTest(var Msg: TWMNCHitTest);
begin
  Msg.Result := HTCLIENT;
end;

Ну или же убрать перехват этого сообщения у класса TAppBar в модуле AppBar.
Ответить с цитированием
  #6  
Старый 25.04.2014, 23:52
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

спасибо с этим я разобрался.
Скажите при создании форма как бы подлетает к нижнему краю экрана скажите можно это как то убрать и можно сделать отступы от левого и правого края
Ответить с цитированием
  #7  
Старый 26.04.2014, 14:19
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Подскажите почему пропадает звук у приложения если использовать этот модуль вот код

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
unit HomeUnit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, AppBar, Vcl.Menus, OptionsUnit2, System.Contnrs,
  Vcl.ComCtrls,
   Winapi.MMSystem, bass_simple ;
 
type
  TForm1 = class(TAppBar)
    Panel1: TPanel;
    Panel2: TPanel;
    PopupMenu1: TPopupMenu;
    mniOptions: TMenuItem;
    Timer1: TTimer;
    Timer2: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure mniOptionsClick(Sender: TObject);
    procedure Panel1Resize(Sender: TObject);
    procedure PClick(Sender: TObject);
    function IndexInParent(vControl: TControl): integer;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private declarations }
     procedure openPanel;
 
  public
    { Public declarations }
    b: TbassSimple;
  end;
 
var
  Form1: TForm1;
  numberPages: Byte ; // номер панели
  selekt_panel: Integer ; // нажатие на панель
  focusPanel: Integer ;   // панель в фокусе
  MinForma,MaxForma : Integer ; // минемальный/максимальный размер панели
 
  paus: Integer ; // Пауза для закрытия
implementation
 
{$R *.dfm}
 
 procedure TForm1.openPanel;
 var
   spid : Integer ;
 begin
  if Form1.Height<=MinForma then
  begin
    //PlaySound('sound\hew\System Notifi.wav', 0, SND_ASYNC);
     b.Play('sound\GTAtitles.mp3');
    for spid := 0 to MaxForma do
   begin
    Form1.Top:=Form1.Top-1;
    Form1.Height:=Form1.Height+1;
   end;
  end;
 
  Form1.Panel1Resize(nil);
 end;
 
  // закрыть панель
 procedure closePanel;
 var
   spid : Integer ;
 begin
  if Form1.Height>=MaxForma then
  begin
  // PlaySound('sound\steam.wav', 0, SND_ASYNC);
   for spid := 0 to MaxForma do
   begin
    Form1.Top:=Form1.Top+1;
    Form1.Height:=Form1.Height-1;
   end;
  end;
 end;
 
{ функция, возвращающая индекс искомого компонента в
списке родителя; возвращает -1 при отсутствии компонента }
function TForm1.IndexInParent(vControl: TControl): integer;
var
 
ParentControl: TWinControl;
begin
 
 {делаем "слепок" родителя через базовой класс на предмет доступности }
 ParentControl := TForm(vControl.Parent);
 if (ParentControl <> nil) then
  begin
   for Result := 0 to ParentControl.ControlCount - 1 do
    begin
     if (ParentControl.Controls[Result] = vControl) then Exit;
    end;
  end;
 { если мы уж попали в это место, то либо не найден компонент, либо компонент не имел родителя }
 Result := -1;
end;
 
procedure TForm1.PClick(Sender: TObject);
var
 i,j: Integer;
begin
 focusPanel:=IndexInParent((sender as TPanel));
 for i:=0 to list.Count-1  do
 begin
  if ( TPanel(list[i]) is TPanel) then  // and (Panel4.Controls[i] <> Sender) and (Pos('Pages',TPanel(Panel4.Controls[i]).Caption) = 1)
  begin
   TPanel(list[i]).Color:=clSilver;
   (sender as TPanel).Color:= clLime;
   if i=focusPanel then
   begin
    TPanel(ListPage[i]).Visible:=True;
   end
   else
   begin
    TPanel(ListPage[i]).Visible:=False;
   end;
 
  end;
 
 end;
 openPanel;
  Timer1.Enabled:=True;
  Panel1Resize(nil);
end;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 // закрыть панель
 if (Mouse.CursorPos.y<Form1.top) or (Mouse.CursorPos.y>Form1.top+Form1.Height) or (Mouse.CursorPos.x<Form1.Left) or (Mouse.CursorPos.x>Form1.Left + Form1.Width)  then
    begin
     Timer2.Enabled:=True;
 
 
      end
      else
      begin
       Timer2.Enabled:=False;
       paus:=0;
      end;
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
 paus:=paus+1;
 if paus=50 then
 begin
  closePanel;
  paus:=0;
  Timer2.Enabled:=False;
  Timer1.Enabled:=False;
 end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 MinForma:=30;
 MaxForma:=100;
 selekt_panel:=-1;
 indexsLst:=-1;
 focusPanel:=0;
 
 b:=TBassSimple.Create(Handle);
 
 Form1.Edge:= abeBottom;
 Form1.Left:=10;
 Panel1.Height:=30;
 Form1.Height:=MinForma;
 Form1.Top:=Screen.WorkAreaHeight - Form1.Height;
 Form1.Width:=Screen.WorkAreaWidth-20;
 
 paus:=1; // Пауза для закрытия
 
// waveOutSetVolume(0,100000); // громкость панельки
 end;
 
 
 
procedure TForm1.mniOptionsClick(Sender: TObject);
begin
 Form2.Show;
end;
 
procedure TForm1.Panel1Resize(Sender: TObject);
const
 Pad = 2;
var
 i,j: Integer;
begin
 Form2.ListBox1.Clear;
 
 if List.Count>0 then
 begin
  For i := 0 to list.Count-1 do
  begin
   TPanel(list[i]).Left:=(Panel1.Width - Pad) * i div List.Count + Pad;
   TPanel(list[i]).Top:=Pad;
   TPanel(list[i]).Height:= Panel1.Height - Pad * 2;
   TPanel(list[i]).Width:= (Panel1.Width - Pad) * (i + 1) div List.Count - TPanel(list[i]).Left;
  end;
 end;
 
 for j := 0 to list.Count-1 do
 begin
  Form2.ListBox1.Items.Add(TPanel(list[j]).Caption)
 
 end;
 
 
 Form2.ListBox1.ItemIndex:=selekt_panel;
 
 
end;
 
end.
Ответить с цитированием
  #8  
Старый 26.04.2014, 14:19
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Это глюк AppBar.pas
Ответить с цитированием
  #9  
Старый 26.04.2014, 18:58
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

в приведенном модуле присутствует такая штука, как bass_simple, используемая для воспроизведения звука (например в строке 54), копать стоит там
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #10  
Старый 26.04.2014, 19:20
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

я пробовал и
Код:
1
PlaySound('sound\hew\System Notifi.wav', 0, SND_ASYNC);

результат тот же звук еле еле слышен если колонки на всю тут я думаю что в модуле AppBar.pas дело или я не правильно его использую так как при компиляции делфи тоже себя видёт странно .

Если не трудно может глянете .
http://gfile.ru/a5Klw

Последний раз редактировалось Gudzik11, 26.04.2014 в 19:27.
Ответить с цитированием
  #11  
Старый 26.04.2014, 19:39
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

да ето я не правильно использую AppBar.pas

Я делал так создал новый проект потом добавил в uses
AppBar
Потом строку
Код:
1
TForm1 = class(TForm)

заменил
Код:
1
TForm1 = class(TAppBar)
Думаю тут нужно было по другому как то делать потому что пример работает отлично и Delphi не глючит и звук работает отлично !

Подскажите как правильно нужно делать?
Ответить с цитированием
  #12  
Старый 26.04.2014, 20:28
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

создал простейшее приложение с SHAppBarMessage и PlaySound (MMSystem, ShellAPI). все отлично воспроизводится.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Gudzik11 (29.04.2014)
  #13  
Старый 29.04.2014, 20:55
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Спасибо тоже сейчас всё стало нормально!
Скажите а как при закрытии формы вернуть рабочий стол на место .
Ответить с цитированием
  #14  
Старый 29.04.2014, 21:47
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Всё понял спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:42.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025