![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#46
|
||||
|
||||
|
Я про ресурсы. Я не настолько туп, что не умею оптимизировать код под свою прогу
![]() |
|
#47
|
||||
|
||||
|
Погоди минутку.
Ну так я там цифры попутал Код:
// идентификаторы
#define ID_POPUPMENU $1000
#define ID_POPUP0 $1010
#define ID_POPUP1 $1020
#define ID_POPUP2 $1030
#define ID_POPUP3 $1040
// Popup menu
ID_POPUPMENU MENUEX
BEGIN
POPUP "Item1" ID_POPUP0
BEGIN
MENUITEM "SubItem1", ID_POPUP1
MENUITEM "SubItem2", ID_POPUP2
MENUITEM "SubItem3", ID_POPUP3
END
ENDПоследний раз редактировалось angvelem, 05.12.2012 в 22:22. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (06.12.2012)
| ||
|
#48
|
||||
|
||||
|
Есть контакт! А как теперь подключить файл ресурсов и обрабатывать щелчки по элементам?
|
|
#49
|
||||
|
||||
|
Подключаешь стандартно {$R res.res}
обрабатывать в WM_COMMAND Код:
WM_COMMAND :
begin
case LOWORD(wParam) of
ID_POPUP : ; // что-то делаем
end;
end;Последний раз редактировалось angvelem, 06.12.2012 в 00:12. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (06.12.2012)
| ||
|
#50
|
||||
|
||||
|
Что за отдельный файл?)
|
|
#51
|
||||
|
||||
|
Создаю файл rc.inc и подключаю там и там.
rc.inc Код:
// идентификаторы const ID_POPUPMENU = $1000; ID_POPUP0 = $1010; ID_POPUP1 = $1020; ID_POPUP2 = $1030; ID_POPUP3 = $1040; Код:
#include "rc.inc"
// Popup menu
ID_POPUPMENU MENUEX
BEGIN
POPUP "Item1"
ID_POPUP0
BEGIN
MENUITEM "SubItem1", ID_POPUP1
MENUITEM "SubItem2", ID_POPUP2
MENUITEM "SubItem3", ID_POPUP3
END
ENDКод:
{$I rс.inc}
{$R rс.res} |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (06.12.2012)
| ||
|
#52
|
||||
|
||||
|
Да, удобно
![]() Вот решил пока с .rc подождать и освоить принцип отображения и обработки PopupMenu, все прекрасно отображается, но события не происходят. Прикрепил исходник, посмотрите. Заранее спасибо. |
|
#53
|
||||
|
||||
|
Неа, с ресурсом удобнее меньше писать. Сейчас погляжу.
Подправил. Последний раз редактировалось angvelem, 06.12.2012 в 02:01. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (06.12.2012)
| ||
|
#54
|
||||
|
||||
|
Спасибо большое)
|
|
#55
|
||||
|
||||
|
Странно, открыл диспетчер задач, при непрерывном изменении размера формы ЦП нагружается на 8-10%, почему так?
|
|
#56
|
||||
|
||||
|
И еще одно, лазил в гугле, так и не нашел решения, как через GetOpenFileName добавить пути файлов в ListBox, вот что у меня есть на данный момент:
Код:
var
OpenFile: TOpenFileName;
Buf: PChar;
begin
GetMem(Buf, 130);
with OpenFile do
begin
lStructSize := SizeOf(OpenFile);
hWndOwner := hInstance;
lpstrfilter := 'MP3 Файлы' + #0 + '*.mp3' + #0#0;
nMaxCustFilter := 255;
nFilterIndex := 1;
lpstrFile := Buf;
nMaxFile := 128;
lpstrFileTitle := nil;
lpstrInitialDir := nil;
lpstrTitle := OpenDlgCap;
Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or
OFN_ALLOWMULTISELECT or OFN_EXPLORER
end;
if GetOpenFileName(OpenFile) then
MessageBox(0, Buf, 'File', mb_ok); // при выборе нескольких файлов вообще не чего не выводится
FreeMem(Buf, 130)
end;Последний раз редактировалось sariman, 06.12.2012 в 19:25. |
|
#57
|
||||
|
||||
|
Описание GetOpenFileName в качестве объекта и заполнение ListView. С ListBox-ом аналогично.
в юните Код:
type
TFileName = type String;
TOpenDialog = Object
Parent : HWND;
FileName : TFileName;
Filter : String;
DefaultExt : String;
Title : String;
InitialDir : String;
Files : TStringList;
function Execute : Boolean;
end;
...
function TOpenDialog.Execute : Boolean;
var
szFile : array[0..MAX_PATH - 1] of Char;
OFN : TOpenFileName;
TempFilter : String;
function ExtractLine(const S : String) : String;
var
P : String;
I : Integer;
begin
for I := 1 to Length(S) do
if S[i] = '|' then
P := P + #0
else
P := P + S[i];
Result := P + #0;
end;
begin
FillChar(OFN, SizeOf(OFN), 0);
FillChar(szFile, SizeOf(szFile), 0);
OFN.lStructSize := SizeOf(TOpenFilename);
OFN.hwndOwner := Parent;
OFN.hInstance := hInstance;
OFN.lpstrTitle := PChar(Title);
TempFilter := ExtractLine(Filter);
OFN.lpstrFilter := PChar(TempFilter);
OFN.lpstrFile := szFile;
OFN.Flags := OFN_EXPLORER or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY or OFN_FILEMUSTEXIST or OFN_ENABLEHOOK or OFN_ENABLESIZING;
OFN.nMaxFile := MAX_PATH;
if (InitialDir = '') then
OFN.lpstrInitialDir := '.'
else
OFN.lpstrInitialDir := PChar(InitialDir);
Result := GetOpenFileName(OFN);
if Result then
FileName := szFile;
end;Код:
var
OD : TOpenDialog;
...
OD.Parent := Wnd;
OD.Title := 'Open file(s)';
OD.Filter := 'Playable files|*.mo3;*.xm;*.mod;*.s3m;*.it;*.mtm;*.umx;*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif|' +
'AIFF - aif|*.aif|' +
'Modules - mo3/xm/mod/s3m/it/mtm/umx|*.mo3;*.xm;*.mod;*.s3m;*.it;*.mtm;*.umx|' +
'Ogg Vorbis - ogg|*.ogg|' +
'MPEG - mp3/mp2/mp1|*.mp3;*.mp2;*.mp1|' +
'WAVE - wav|*.wav|' +
'All files|*.*';
OD.DefaultExt := '*.*';
OD.Options := [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofOldStyleDialog, ofEnableSizing];
...
// Диалог открытия файла
if OD.Execute then
begin
// заполняем ListView
for I := 0 to OD.Files.Count - 1 do
with ListView.Items.Add do
begin
Caption := IntToStr(I + ListView.Items.Count);
SubItems.Add(OD.Files.Strings[i]);
end;
end;Последний раз редактировалось angvelem, 06.12.2012 в 22:31. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (06.12.2012)
| ||
|
#58
|
||||
|
||||
|
В смысле в юните? Создавать отдельно? Да и я же на чистом WinAPI пишу.
Последний раз редактировалось sariman, 06.12.2012 в 23:48. |
|
#59
|
||||
|
||||
|
И что, чем это мешает созданию отдельных юнитов и классов? Тот же TStringList, используемый в TOpenDialog, у меня выдран частями из исходников Дельфи и в нём убрано всё, что относится к Forms, Classes и остальным раздувающим выходной файл.
|
|
#60
|
||||
|
||||
|
А можете скинуть если не трудно этот юнит? Просто зачем изобретать уже изобретенное
![]() |