Дата: Четверг, 26.05.2011, 09:50 | Сообщение # 151
Злой модер
Модератор
Сообщений: 186
Статус: Offline
Главное, чтобы тема действительно не ушла в морг. Я смотрю, там некоторые стараются расшевелить мозги, задавая вопросы, которые доействительно заставляют задуматся и поковырятся в различных справках. Но не вижу особой охоты участников отвечать на такие вопросы.
Дата: Четверг, 26.05.2011, 10:26 | Сообщение # 154
Админ
Администратор
Сообщений: 76
Статус: Offline
Ну с комбобоксом я работал и на Дельфи и на С. Ничего сложного нету. А вот в Inno я с ними дело не имел. Если нужно могу выложить несколько процедур/функций для работы с комбобоксом через Api Рок моя честь, а моя честь моя жизнь.
Дата: Четверг, 26.05.2011, 10:42 | Сообщение # 156
Админ
Администратор
Сообщений: 76
Статус: Offline
//------------------------------------------------------------------- // ComboBox Helper Macros //------------------------------------------------------------------- //Определение колличества пунктов в ComboBox function ComboBox_GetItemCount(hComboBox: HWND): Integer; begin Result := SendMessage(hComboBox, CB_GETCOUNT, 0, 0); end;
//Удаление определенного пункта в ComboBox procedure ComboBox_DeleteItem(hComboBox: HWND; Index: Integer); begin SendMessage(hComboBox, CB_DELETESTRING, Index, 0); end;
//Удаление всех пунктов в ComboBox procedure ComboBox_ClearItems(hComboBox: HWND); begin SendMessage(hComboBox, CB_RESETCONTENT, 0, 0); end;
//Добавление пункта в ComboBox function ComboBox_AddItem(hComboBox: HWND; NewItem: String): Integer; begin Result := SendMessage(hComboBox, CB_ADDSTRING, 0, Integer(NewItem)); end;
//Добавление объекта в ComboBox procedure ComboBox_AddItemData(hComboBox: HWND; Index, Data: Integer); begin SendMessage(hComboBox, CB_SETITEMDATA, Index, Data); end;
//Определение объекта в ComboBox function ComboBox_GetItemData(hComboBox: HWND; Index: Integer): TObject; begin Result := TObject(SendMessage(hComboBox, CB_GETITEMDATA, Index, 0)); end;
//Добавление пункта в определенное место в ComboBox procedure ComboBox_InsertItem(hComboBox: HWND; Index: Integer; NewItem: String); begin SendMessage(hComboBox, CB_INSERTSTRING, Index, Integer(NewItem)); end;
//Определение имени выбранного пункта в ComboBox function ComboBox_GetSelectedItem(hComboBox: HWND): string; var Index, len: Integer; s: string; buffer: PChar; begin Index := SendMessage(hComboBox, CB_GETCURSEL, 0, 0); len := SendMessage(hComboBox, CB_GETLBTEXTLEN, wParam(Index), 0); GetMem(buffer, len + 1); SendMessage(hComboBox, CB_GETLBTEXT, wParam(Index), lParam(buffer)); SetString(s, buffer, len); FreeMem(buffer); Result := s; end;
//Определение номера выбранного пункта в ComboBox function ComboBox_GetCountSelectedItem(hComboBox: HWND): Integer; var Index, len: Integer; s: string; buffer: PChar; begin Index := SendMessage(hComboBox, CB_GETCURSEL, 0, 0); len := SendMessage(hComboBox, CB_GETLBTEXTLEN, wParam(Index), 0); GetMem(buffer, len + 1); SendMessage(hComboBox, CB_GETLBTEXT, wParam(Index), lParam(buffer)); SetString(s, buffer, len); FreeMem(buffer); Result := Index; end;
//Определение имени пункта по номеру в ComboBox function ComboBox_GetItem(hComboBox: HWND; LbItem: Integer): string; var l: Integer; buffer: PChar; begin l := SendMessage(hComboBox, CB_GETLBTEXTLEN, LbItem, 0); GetMem(buffer, l + 1); SendMessage(hComboBox, CB_GETLBTEXT, LbItem, Integer(buffer)); Result := StrPas(buffer); FreeMem(buffer); end;
//Выбор пункта в ComboBox по счету procedure ComboBox_SelectedItem(hComboBox: HWND; Index: Integer); begin SendMessage(hComboBox, CB_SETCURSEL, Index, 0); end;
//Выбор пункта в ComboBox по имени procedure ComboBox_SelectedString(hComboBox: HWND; Text: String); begin SendMessage(hComboBox, CB_SELECTSTRING, 0, Integer(Text)); end;
//Открытие пунктов ComboBox procedure ComboBox_OpenItems(hComboBox: HWND); begin SendMessage(hComboBox, CB_SHOWDROPDOWN, Integer(True), 0); end;
//Проверяем, открыты ли пункты ComboBox function ComboBox_GetOpenItems(hComboBox: HWND): Boolean; begin Result := BOOL(SendMessage(hComboBox, CB_GETDROPPEDSTATE, 0, 0)); end;
//Функция, обрабатывающая все команды от элементов управления окна function DlgProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall; var i: Integer; Drive: String; DTYpe: Integer; begin Result := False; case uMsg of WM_INITDIALOG: begin //Заполняем ComboBox (11 и 12) for i := Ord('A') to Ord('Z') do begin Drive := Chr(i) + ':\'; DType := GetDriveType(PCHar(Drive)); //CD-ROM if DType = DRIVE_CDROM then ComboBox_AddItem(GetDlgItem(hWin, 11), Drive); ComboBox_SelectedItem(GetDlgItem(hWin, 11), 0); //HDD if DType = DRIVE_FIXED then ComboBox_AddItem(GetDlgItem(hWin, 12), Drive); ComboBox_SelectedItem(GetDlgItem(hWin, 12), 0); end; end; WM_COMMAND: begin case HIWORD(wp) of CBN_SELCHANGE: //При выборе диска в ComboBox case LoWord(wp) of 11: begin //Получаем букву диска Drive := ComboBox_GetSelectedItem(GetDlgItem(hWin, 11)); //Выводим тип диска Edit_SetText(GetDlgItem(hWin, 10), GetDriveDisplayString(Drive)); end; 12: begin //Получаем букву диска Drive := ComboBox_GetSelectedItem(GetDlgItem(hWin, 12)); //Выводим тип диска Edit_SetText(GetDlgItem(hWin, 10), GetDriveDisplayString(Drive)); end; end; end; case LoWord(wp) of //При нажатии на кнопку с идентификатором 1 закрываем программу 1: EndDialog(hWin, 0); end; end; //При нажатии на кнопку "Х" в шапке программы закрываем приложение WM_DESTROY, WM_CLOSE: PostQuitMessage(0); end; end;
begin //Открываем диалоговое окно MAIN_WINDOW (достаем окно из ресурсов) DialogBox(hInstance, 'MAIN_WINDOW', 0, @DlgProc);
Дата: Понедельник, 30.05.2011, 19:02 | Сообщение # 160
Злой модер
Модератор
Сообщений: 186
Статус: Offline
Edison007, Может я чегото неправильно помню, но вроде это зависит от настройки системы - либо она видит иконку длл-ки, либо в любом случае присваивает системную иконку.
Дата: Понедельник, 30.05.2011, 21:04 | Сообщение # 162
Энтузиаст
Проверенный
Сообщений: 110
Статус: Offline
kampaster Я имею ввиду вообще, у всех длл файлов в системе, мне не нравится иконка ддл файлов и поэтому я хочу её изменить, как сделать у отдельной я знаю Кто не с нами, тот в запое...
Дата: Понедельник, 30.05.2011, 21:10 | Сообщение # 163
Местный гуру
Администратор
Сообщений: 150
Статус: Offline
Quote (Edison007)
Я имею ввиду вообще, у всех длл файлов в системе, мне не нравится иконка ддл файлов и поэтому я хочу её изменить, как сделать у отдельной я знаю
Ну тогда любой редактор ресурсов тебе в руки. Все иконки зашиты в %SystemDrive%\Windows\system32\shell32.dll Как много дел считались невозможными, пока они не были осуществлены. (Гай Плиний Секунд) Не занимаюсь подключением FreeArc/ISDone к чужим скриптам.
Дата: Вторник, 31.05.2011, 03:58 | Сообщение # 165
Пользователь
Сообщений: 17
Статус: Offline
Quote (Shegorat)
Ну тогда любой редактор ресурсов тебе в руки
Ну можно и полегче чтоб не теребить ресурсы, свойства файла вкладка icon или в любой открытой папке Сервис > свойства папки > типы файлов > выбрать нужное расширение dll > кнопка дополнительно > кнопка сменить значок Многие вещи кажутся изысканными пока они происходят не с вами