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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #46  
Старый 05.12.2012, 17:03
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Я про ресурсы. Я не настолько туп, что не умею оптимизировать код под свою прогу
Ответить с цитированием
  #47  
Старый 05.12.2012, 22:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Погоди минутку.

Ну так я там цифры попутал
Код:
// идентификаторы
#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
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 05.12.2012 в 22:22.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (06.12.2012)
  #48  
Старый 05.12.2012, 23:56
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Есть контакт! А как теперь подключить файл ресурсов и обрабатывать щелчки по элементам?
Ответить с цитированием
  #49  
Старый 06.12.2012, 00:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Подключаешь стандартно {$R res.res}
обрабатывать в WM_COMMAND
Код:
  WM_COMMAND : 
  begin
    case LOWORD(wParam) of
      ID_POPUP    : ; // что-то делаем   
    end;
  end;
Я обычно ресурсный файл немного не так создаю. Константы выношу в отдельный файл, а затем его уже можно подключить и к ресурсному файлу и к проекту.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 06.12.2012 в 00:12.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (06.12.2012)
  #50  
Старый 06.12.2012, 00:33
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Что за отдельный файл?)
Ответить с цитированием
  #51  
Старый 06.12.2012, 00:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Создаю файл rc.inc и подключаю там и там.
rc.inc
Код:
// идентификаторы
const
  ID_POPUPMENU    = $1000;
  ID_POPUP0   = $1010;
  ID_POPUP1   = $1020;
  ID_POPUP2   = $1030;
  ID_POPUP3   = $1040;
rc.rc
Код:
#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}
Теперь имена идентификатор доступны в программе и не нужно писать цифры.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (06.12.2012)
  #52  
Старый 06.12.2012, 00:44
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Да, удобно
Вот решил пока с .rc подождать и освоить принцип отображения и обработки PopupMenu, все прекрасно отображается, но события не происходят. Прикрепил исходник, посмотрите. Заранее спасибо.
Вложения
Тип файла: rar Player.rar (18.3 Кбайт, 16 просмотров)
Ответить с цитированием
  #53  
Старый 06.12.2012, 00:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Неа, с ресурсом удобнее меньше писать. Сейчас погляжу.
Подправил.
Вложения
Тип файла: rar jp.rar (3.0 Кбайт, 11 просмотров)
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 06.12.2012 в 02:01.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (06.12.2012)
  #54  
Старый 06.12.2012, 16:17
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Спасибо большое)
Ответить с цитированием
  #55  
Старый 06.12.2012, 16:37
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Странно, открыл диспетчер задач, при непрерывном изменении размера формы ЦП нагружается на 8-10%, почему так?
Ответить с цитированием
  #56  
Старый 06.12.2012, 17:41
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

И еще одно, лазил в гугле, так и не нашел решения, как через 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  
Старый 06.12.2012, 22:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Описание 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;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 06.12.2012 в 22:31.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (06.12.2012)
  #58  
Старый 06.12.2012, 23:46
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

В смысле в юните? Создавать отдельно? Да и я же на чистом WinAPI пишу.

Последний раз редактировалось sariman, 06.12.2012 в 23:48.
Ответить с цитированием
  #59  
Старый 07.12.2012, 00:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

И что, чем это мешает созданию отдельных юнитов и классов? Тот же TStringList, используемый в TOpenDialog, у меня выдран частями из исходников Дельфи и в нём убрано всё, что относится к Forms, Classes и остальным раздувающим выходной файл.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #60  
Старый 07.12.2012, 00:27
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

А можете скинуть если не трудно этот юнит? Просто зачем изобретать уже изобретенное
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter