Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Kursist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
Извиняюсь за оффтоп.

Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 17:00 11-05-2009
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Не работает, потому что 'А' и 'Я' - ето AnsiChar; замените на #$0410 и #$042F.
Но имейте ввиду, что такой алгоритм не работает с другие символы, напр. "ё".
Вообще, вот как сделано в SysUtils:
Код:
function WideLowerCase(const S: WideString): WideString;
var
  Len: Integer;
begin
  Len := Length(S);
  SetString(Result, PWideChar(S), Len);
  if Len > 0 then CharLowerBuffW(Pointer(Result), Len);
end;
 
CharLowerBuffW находится в user32.dll.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 10:30 12-05-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
Спасибо, функция то что надо. У меня просто dcu файлы.
 
Вопрос к знающим. Вот например у меня есть на окошке меню, состоящее из нескольких столбцов - Файл/Правка/Справка. Мне нужно придать всем пунктам стиль овнердрав. Как-нибудь можно за один раз пройтись по всем столбцам рекурсивно? Знаю что есть GetMenuItemCount, но это только для подменю одного столбца действует. Мне бы все сразу одним заходом обработать - заранее неизвестно сколько будет пунктов и столбцов. Ищу ищу и что-то в поисковике ничего подходящего не находится.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 00:00 13-05-2009
AleksXP

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет! Подскажите пожалуйста кто знает:
У меня есть два компонента TreeView и WebBrowser1 .
Мне нужно чтобы при клике на узел в TreeView открывалась страниц в WebBrowser1 и при смене страницы менялся узел.
 

Всего записей: 42 | Зарегистр. 02-09-2007 | Отправлено: 02:39 13-05-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AleksXP
а написать обработчик OnClick для TreeView не судьба? и написать обработчик при смене страницы у WebBrowser'a? или вам готовый код подать?

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 08:36 13-05-2009
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Попробуй GetSubMenu - там вторым параметром menu item position. По сути главное меню это набор dropdownmenu - вот кусок хелпа
If the function succeeds, the return value is the handle of the drop-down menu or submenu activated by the menu item.
а вот пример кода

Код:
 
var
      hM:HMENU;
      mn:array[0..10] of char;
begin
      hm:=GetSubMenu(MainMenu1.Handle,1);
      GetMenuString(hm,0,mn,2,MF_BYPOSITION);
      ShowMessage(mn);
 

там у меня главное меню с 2 пунктами и у каждого пункта по подменю. В итоге выводится сообщение с текстом самого верхнего пунтка.  
Поэтому тебе надо будет сделать 2 цикла, первый по элементам главного меню (вернее для перебора их хэндлов) и второй внутренний цикл под под элементам внутреннего меню. НО... если внутри будут еще подменюшки - тогда надо самому писать рекурсию или что то типа того
процедура OwnerDrawMenu(hMen:HMENU);
начинаем перебор элементов меню с 0 до GetMenuItemCount-1
Для каждого элемента проверяем GetSubMenu если 0, то делаем свои дела (устанавливаем флаг оунердроу) иначе опять вызываем нашу процеду OnwerDrawMenu с возвращенным хэндлом.  


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:21 13-05-2009
AleksXP

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f3ka это я уже делал, просто мне нужно открывать станицы в зависимости от выставленного index'а в treeView,  в Onclick у меня открывается следующая страница и она никак не привязана к к конкретному  пункту в треевиев
p.s. знал бы я не спрашивал

Всего записей: 42 | Зарегистр. 02-09-2007 | Отправлено: 11:54 13-05-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AleksXP
только совсем не понятно что хранится в TreeView...  
если бы был код можно было бы сказать что с ним можно сделать...
и тем более не понятно почему на OnClick происходит открытие следующей страницы никак не привязанной к Node...
у TreeView есть OnChange... почему бы там не проанализировать какой Node выбрали и открыть страницу?

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 12:21 13-05-2009 | Исправлено: f3ka, 12:23 13-05-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Да не, внутри подменюшек не будет у подменюшек, хотя можно тоже цикл сделать. Сделал пока так:
 

Код:
        //узнаем сколько подменю у главного меню
        iCount := GetMenuItemCount(hAppMenu);
        //проходимся по всем подменю
        for mIndex := 0 to iCount do
        begin
            //узнаем сколько пунктов в подменю и проходимся по ним
            iSubCount := GetMenuItemCount(GetSubMenu(hAppMenu, mIndex));
            for mSubIndex := 0 to iSubCount do
              begin
                iSubID := GetMenuItemID(GetSubMenu(hAppMenu, mIndex), mSubIndex);
                iState := GetMenuState(hAppMenu, iSubID, MF_BYCOMMAND);
                if (iState and MF_SEPARATOR = MF_SEPARATOR) then
                  ModifyMenuW(GetSubMenu(hAppMenu, mIndex), iSubID, MF_SEPARATOR or MF_BYCOMMAND or MF_OWNERDRAW, iSubID, nil)
                else
                  ModifyMenuW(GetSubMenu(hAppMenu, mIndex), iSubID, MF_BYCOMMAND or MF_OWNERDRAW, iSubID, nil);
              end;
        end;
 

Пока есть единственный и существенный недостаток. В меню разделители под нулевым идентификатором и их может быть в подменю несколько штук. Такой проход по пунктам овнердравит только первый попавшийся нулевой идентификатор в любом подменю - остальные обходятся стороной. Просто не хочется мудрить с флагом MF_BYPOSITION, подозреваю что в этом случае нужно через него - чтобы уж наверняка изменить перебираемый элемент. Может есть решение в этом случае?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 14:16 13-05-2009
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
Просто не хочется мудрить с флагом MF_BYPOSITION

На самом деле - это наиболее мудрое решение, так как ты в данном случае пляшешь от количества элементов - поэтому BYPOSITION то что доктор прописал

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 17:06 13-05-2009
Dromaf

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хай чуваки!  Помогите решить задачу.Буду очень признателен.
 
Написать программу для пересчета из миль в километры и наоборот (1 миля = 1.609344 км) и выводить сообщение с результатом. Расстояние вводится из окна формы, программа должна обеспечить невозможность введения выходных одновременно в милях и километрах и не допустите ввод недопустимых символов.

Всего записей: 4 | Зарегистр. 13-05-2009 | Отправлено: 19:34 13-05-2009 | Исправлено: Dromaf, 19:36 13-05-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Опа, что-то я запутался немного. В уме крутил вертел представлял как пункты будут обрабатываться...
 
Было так:

Код:
        //узнаем сколько подменю у главного меню
        iCount := GetMenuItemCount(hAppMenu);
        //проходимся по всем подменю
        for mIndex := 0 to iCount do
        begin
            //узнаем сколько пунктов в подменю и проходимся по ним
            iSubCount := GetMenuItemCount(GetSubMenu(hAppMenu, mIndex));
            for mSubIndex := 0 to iSubCount do
              begin
                iSubID := GetMenuItemID(GetSubMenu(hAppMenu, mIndex), mSubIndex);
                iState := GetMenuState(hAppMenu, iSubID, MF_BYCOMMAND);
                if (iState and MF_SEPARATOR = MF_SEPARATOR) then
                  ModifyMenuW(GetSubMenu(hAppMenu, mIndex), iSubID, MF_SEPARATOR or MF_BYCOMMAND or MF_OWNERDRAW, iSubID, nil)
                else
                  begin
                    //itemData.iData := itemIcon;
                    ModifyMenuW(GetSubMenu(hAppMenu, mIndex), iSubID, MF_BYCOMMAND or MF_OWNERDRAW, iSubID, PWideChar(itemData.itemIcon));
                    Inc(itemData.itemIcon);
                  end;
              end;
        end;
 

 
Стало так:

Код:
        //узнаем сколько подменю у главного меню
        iCount := GetMenuItemCount(hAppMenu);
        //проходимся по всем подменю
        for mIndex := 0 to iCount do
        begin
            //узнаем сколько пунктов в подменю и проходимся по ним
            iSubCount := GetMenuItemCount(GetSubMenu(hAppMenu, mIndex));
            for mSubIndex := 0 to iSubCount do
              begin
                //iSubID := GetMenuItemID(GetSubMenu(hAppMenu, mIndex), mSubIndex);
                //идентификатор пункта нам не нужен теперь
                //в цикле теперь определяем тип каждого пункта подменю разделитель он или нет
                iState := GetMenuState(GetSubMenu(hAppMenu, mIndex), mSubIndex, MF_BYPOSITION);
                if (iState and MF_SEPARATOR = MF_SEPARATOR) then
                  ModifyMenuW(GetSubMenu(hAppMenu, mIndex), mSubIndex, MF_SEPARATOR or MF_BYPOSITION or MF_OWNERDRAW, mSubIndex, nil)
                else
                  begin
                    //itemData.iData := itemIcon;
                    ModifyMenuW(GetSubMenu(hAppMenu, mIndex), mSubIndex, MF_BYPOSITION or MF_OWNERDRAW, mSubIndex, PWideChar(itemData.itemIcon));
                    Inc(itemData.itemIcon);
                  end;
              end;
        end;
 

 
Вот, думаю код отрисовки в оконной процедуре приводить не надо. Там через MF_BYCOMMAND реализовано рисование строк. Думаю от этого не зависит конечная отрисовка, ведь флаг для команды соответствующий, ну и там как раз lpdis.itemID вкачестве идентификатора.
 
А трабл сейчас вот какой. Почему-то отображаются пункты от предыдущего подменю на следующем вместо его необходимых - в моем случае от первоо подменю текст отображается на всех последующих.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:34 13-05-2009
NOwlar



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Походу, ошибочка в коде. Надо писать так:

Код:
 
for mIndex := 0 to iCount -1 do
....
            for mSubIndex := 0 to iSubCount - 1 do
 


Всего записей: 170 | Зарегистр. 25-01-2006 | Отправлено: 20:46 13-05-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dromaf
Ну и в чем конкретно у вас проблема? Или вы предлагаете нам самим эту программу полностью написать, а вы потом скажете нам "Спасибо"?

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:12 13-05-2009 | Исправлено: Frodo_Torbins, 21:55 13-05-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dromaf
Просто в интернете уже готовые калькуляторы на это есть, задача сама по себе не логична. Если бы Вы нам поиск в ГОСТах предложили...

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:21 13-05-2009
Dromaf

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Dromaf  
Ну и в чем конкретно у вас проблема? Или вы предлагаете нам самим эту программу полностью написать, а вы потом скажете нам "Спасибо"?  

Да)напишите плж,а то запара по предмету.
 

Всего записей: 4 | Зарегистр. 13-05-2009 | Отправлено: 22:15 13-05-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dromaf
Подмигивающий смайлик там не просто так стоит.
Во-первых написать то я смогу... например на MSEgui с использованием регэкспов. Но ведь преподаватель такое не примет.
Во-вторых зачем мне отнимать хлеб у братьев по клавиатуре, которые своими объявлениями залепливают все институтские доски объявлений?

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:40 13-05-2009 | Исправлено: Frodo_Torbins, 23:19 13-05-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NOwlar
Да нет, при чем тут это.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 23:04 13-05-2009
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dromaf
Сколько заплатишь?

----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 04:51 14-05-2009
Grande



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые знатоки, существует ли способ получить формат даты-времени с удаленного SQL-сервера (например, с PostgreSQL'а)?
А то моя прога на одних серверах работает, на других вылетает с сообщением о неверной дате
Попробовал погуглить - не тут-то было, нету ничего подобного.

Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 10:59 14-05-2009
   

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru