Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: Mandor Sawall
Дата сообщения: 12.05.2009 09:30
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;
Автор: Maks150988
Дата сообщения: 12.05.2009 23:00
Mandor Sawall
Спасибо, функция то что надо. У меня просто dcu файлы.

Вопрос к знающим. Вот например у меня есть на окошке меню, состоящее из нескольких столбцов - Файл/Правка/Справка. Мне нужно придать всем пунктам стиль овнердрав. Как-нибудь можно за один раз пройтись по всем столбцам рекурсивно? Знаю что есть GetMenuItemCount, но это только для подменю одного столбца действует. Мне бы все сразу одним заходом обработать - заранее неизвестно сколько будет пунктов и столбцов. Ищу ищу и что-то в поисковике ничего подходящего не находится.
Автор: AleksXP
Дата сообщения: 13.05.2009 01:39
Всем привет! Подскажите пожалуйста кто знает:
У меня есть два компонента TreeView и WebBrowser1 .
Мне нужно чтобы при клике на узел в TreeView открывалась страниц в WebBrowser1 и при смене страницы менялся узел.

Автор: f3ka
Дата сообщения: 13.05.2009 07:36
AleksXP
а написать обработчик OnClick для TreeView не судьба? и написать обработчик при смене страницы у WebBrowser'a? или вам готовый код подать?
Автор: ShIvADeSt
Дата сообщения: 13.05.2009 10:21
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);
Автор: AleksXP
Дата сообщения: 13.05.2009 10:54
f3ka это я уже делал, просто мне нужно открывать станицы в зависимости от выставленного index'а в treeView, в Onclick у меня открывается следующая страница и она никак не привязана к к конкретному пункту в треевиев
p.s. знал бы я не спрашивал
Автор: f3ka
Дата сообщения: 13.05.2009 11:21
AleksXP
только совсем не понятно что хранится в TreeView...
если бы был код можно было бы сказать что с ним можно сделать...
и тем более не понятно почему на OnClick происходит открытие следующей страницы никак не привязанной к Node...
у TreeView есть OnChange... почему бы там не проанализировать какой Node выбрали и открыть страницу?
Автор: Maks150988
Дата сообщения: 13.05.2009 13:16
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;
Автор: ShIvADeSt
Дата сообщения: 13.05.2009 16:06
Maks150988

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

На самом деле - это наиболее мудрое решение, так как ты в данном случае пляшешь от количества элементов - поэтому BYPOSITION то что доктор прописал
Автор: Dromaf
Дата сообщения: 13.05.2009 18:34
Хай чуваки! Помогите решить задачу.Буду очень признателен.

Написать программу для пересчета из миль в километры и наоборот (1 миля = 1.609344 км) и выводить сообщение с результатом. Расстояние вводится из окна формы, программа должна обеспечить невозможность введения выходных одновременно в милях и километрах и не допустите ввод недопустимых символов.
Автор: Maks150988
Дата сообщения: 13.05.2009 19:34
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;
Автор: NOwlar
Дата сообщения: 13.05.2009 19:46
Походу, ошибочка в коде. Надо писать так:

Код:
for mIndex := 0 to iCount -1 do
....
for mSubIndex := 0 to iSubCount - 1 do
Автор: Frodo_Torbins
Дата сообщения: 13.05.2009 20:12
Dromaf
Ну и в чем конкретно у вас проблема? Или вы предлагаете нам самим эту программу полностью написать, а вы потом скажете нам "Спасибо"?
Автор: delover
Дата сообщения: 13.05.2009 20:21
Dromaf
Просто в интернете уже готовые калькуляторы на это есть, задача сама по себе не логична. Если бы Вы нам поиск в ГОСТах предложили...
Автор: Dromaf
Дата сообщения: 13.05.2009 21:15

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

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

Автор: Frodo_Torbins
Дата сообщения: 13.05.2009 21:40
Dromaf
Подмигивающий смайлик там не просто так стоит.
Во-первых написать то я смогу... например на MSEgui с использованием регэкспов. Но ведь преподаватель такое не примет.
Во-вторых зачем мне отнимать хлеб у братьев по клавиатуре, которые своими объявлениями залепливают все институтские доски объявлений?
Автор: Maks150988
Дата сообщения: 13.05.2009 22:04
NOwlar
Да нет, при чем тут это.
Автор: Tantos
Дата сообщения: 14.05.2009 03:51
Dromaf
Сколько заплатишь?
Автор: Grande
Дата сообщения: 14.05.2009 09:59
Уважаемые знатоки, существует ли способ получить формат даты-времени с удаленного SQL-сервера (например, с PostgreSQL'а)?
А то моя прога на одних серверах работает, на других вылетает с сообщением о неверной дате
Попробовал погуглить - не тут-то было, нету ничего подобного.
Автор: VitOs2
Дата сообщения: 14.05.2009 11:19
Друзья! Помогите решить следующую задачу.
Есть текст в каком-то компоненте (к примеру TEdit).
Текст следующего формата:
"работа над объектами 23432, 345345 и 445"
Нужно выделить все цифры гипперсылками (по некоторому алгоритму, например, больше 100). И назначить действие при нажатии, например, OpenObject(id).
Посоветуйте, как можно это реализовать. Может, на основе другого какого-нибудь компонента...
Спасибо!
Автор: OOD
Дата сообщения: 14.05.2009 11:54
Проблема такая :
есть WebBrowser
есть html документ

При нажатии по ссылке в html документе, который открыт через WebBrowser по событию WebBrowser1DocumentComplete форма должна закрыться тогда когда прогрузиться документ по имени exit, на некоторых компьютерах закрывается, не некоторых нет почему понять не могу


Код: procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var e:string;
begin
e:=('exit');
if e=WebBrowser1.LocationName then
begin
close;
Application.Terminate;
end;
end;
Автор: V1s1ter
Дата сообщения: 14.05.2009 12:27
Grande

Цитата:
Уважаемые знатоки, существует ли способ получить формат даты-времени с удаленного SQL-сервера (например, с PostgreSQL'а)?

Я незнаком со всеми SQL серверами, но, IMHO, алгоритм таков.
1) определяем Тип SQL сервера.
2) Для каждого типа формируем свой запрос о формате даты, например для MS SQL "select @DateTimeFormat".
Не смотря, на то, что форматы стындартезированы есть отличия. Пример 1-JAN-2009 InterBase поймет в любом случае, а МЫ SQL только если региональные настройки английские, а если русские то подавай ему 1-ЯНВ-2009.
Есть еще один формат ISO 8601, шабол таков ГГГГММДДTчч:мм:сс[.ммм] в середине именно латинская "T", она отделяет дату от времени.
Еще незабывайте, что возможно при одинаковом формате для разных серверов могут потребоватся разные кавычки для заключения этой самой даты.
Автор: greenpc
Дата сообщения: 14.05.2009 13:49
Grande
как сказал V1s1ter используйте в Вашей программе формат ISO
или подозреваю у Вас типа такого .ParamByName().Value :='12.01.2009' т.е. строка
переделайте в формат TDateTime
var mDate : TDateTime;
begin
mDate :=Now;
.ParamByName().Value := mDate;

Автор: Grande
Дата сообщения: 14.05.2009 15:15
V1s1ter
Нету в постгресе DateTimeFormat, в том-то и дело
Да и похожего ничего нет.


Добавлено:
greenpc
У меня не так, но это мысль. Спасибо, попробую.
Автор: V1s1ter
Дата сообщения: 14.05.2009 16:34
Grande
greenpc
Указанный вами способ проидет только для одного типа серверов, я понял, нужен универсальный. Поэтому сначало и надо определить тип сервера, а потом исходя из его возможностей и все остальное. Тип DateTime напрямую можно отослать толькос помощью api сервера, универсаньный код должен генерить строки в соответствующем формате.
Если интересовал только PostgreSQL, то и вопрос нужно было задать именно понему.
Автор: f3ka
Дата сообщения: 14.05.2009 16:45
V1s1ter
вы не правы что надо определять тип сервера... как раз таки компоненты доступа уже знают куда они подключены и параметр будет преобразован в правильный вид...
Автор: V1s1ter
Дата сообщения: 14.05.2009 17:02
f3ka
Да видимо глупость написал... Точнее написл правильно, в смысле реализации решения, но забыл, что разработчики универсальных компонент, тоже должны были режить эту проблему. Сорри ...
Автор: Kursist
Дата сообщения: 17.05.2009 15:00
У меня возник вопрос.
У меня обычное VCL приложение. Как можно повысить приоритет основного и единственного потока своей программы? (гугли предложило только информацию про многопоточные приложения)
Автор: Terre
Дата сообщения: 17.05.2009 18:36
Kursist
что то типа того наверное

для приложения
SetPriorityClass(GetCurrentProcess, xxx_PRIORITY_CLASS);

для потока
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_xxxxx);
Автор: Kursist
Дата сообщения: 17.05.2009 20:21
Terre
Спасибо!
Про поток информацию находил, а про приложение нет.
А где лучше это вставлять? В FormCreate, FormActivate ?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.