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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Я еще не работал с D2009, но разве константные строки (и символы) не Unicode?
Т.е. вот ето:
Код:
if (Key >= 'А') and (Key <= 'я') then
работает или нет?

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 12:44 26-02-2009 | Исправлено: Mandor Sawall, 12:44 26-02-2009
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спецы подскажите пожалуйста как сделать вылет формы по центру экрана ?

Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 14:22 26-02-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StalkerSoftware
Есть, она называется SetCodePage.
Mandor Sawall
Работает, но оставляет за бортом такие буквы как "ЁёІіЇїЄєҐґ".
 
Добавлено:
OOD
Поставьте ей Position=poDesktopCenter.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:22 26-02-2009
f3ka

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

Цитата:
Поставьте ей Position=poDesktopCenter.

или poScreenCenter

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 14:35 26-02-2009
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
f3ka
Спасибо

Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 14:38 26-02-2009
dimonadv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто подскажет как можно перенести (в 2009) сохраненные настройки раскладки десктопа на другую машину. Вернее где они хранятся ?
Суть проблемы в том что на одной машине QA Audits отрабатывает, а окно с результатами не появляется (на другой машине тот же проект - все ок).
Если запускать QA Metrics, то окно Metrics появляется без проблем. Может оно по каким то причинам находится вне видимости экрана ? На 2006 пару раз такое бывало, сносил DSK и помогало, а тут немогу понять где она все хранит.

Всего записей: 80 | Зарегистр. 20-12-2004 | Отправлено: 21:28 27-02-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimonadv
У меня C:\Users\*\AppData\Roaming\CodeGear\BDS\6.0, а вообще можете выполнить поиск файлов *.dst.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 21:38 27-02-2009
Bonivur



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Никак не могу найти хороший алгоритм. Задача (в обобщенно-отвлеченном изложении) выглядит так:
Требуется найти все слова в заданном тексте, нечинающиеся с заглавной буквы и вывести их (допустим) в TList. Причем, в тексте могут быть слова, у которых заглавная буква где-то посередине (такие слова в список не включать).

----------
Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 22:21 27-02-2009
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bonivur
Задача простая, делаешь набор А символов разделитей (пробел, точка, запятая и тп). И набор Б символов, которые могут стоять перед словом (пробел, кавычки и тп). Далее перебираешь символы по одному, если нашел символ из набора Б, то смотришь след символ болшая буква или нет, если да то начиная с этой позиции сканируешь на наличие символа из набора А. Как нашел- то что внутри нужное слово, дальше ищешь с последней позиции.

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 06:34 28-02-2009
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет. Кто-нибудь может помочь с такой ситуацией?
 
Нужно отображать панель меню в ребаре - наподобие проводника/интернет эксплорера/системных программ.
Сделал так: загрузил ресурс диалога И добавил это окошко в банд ребара.
Как через SetParent или через что это делается сделать полностью загруженное окно CHILD?
 

Код:
{}
procedure CreateMenuRebarToolbar(hWnd: Thandle);
var
  hMenuRebar: Thandle;
  TRebarRect: TRect;
  TRebarInfo: TRebarBandInfoW;
  hChildWind: Thandle;
  cxIdeal   : Integer;
  cxIndex   : Integer;
  szBtnText : WideString;
begin
  hMenuRebar := CreateWindowExW(WS_EX_TOOLWINDOW, REBARCLASSNAME, nil, WS_VISIBLE or WS_BORDER or WS_CHILD or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or RBS_VARHEIGHT or RBS_BANDBORDERS or CCS_NODIVIDER, 0, 0, 0, 0, hWnd, ID_MENUEX_SYSREBAR, hInstance, nil);
 
  if (hMenuRebar <> 0) then
    begin
      hChildWind := CreateDialogW(hInstance, MAKEINTRESOURCEW(RC_DIALOG_MENUEX), 0, nil);
      if (hChildWind <> 0) then
        begin
          SetMenu(hChildWind, RebarMenu);
          GetWindowRect(hChildWind, TRebarRect);
          ZeroMemory(@TRebarInfo, SizeOf(TRebarInfo));
          TRebarInfo.cbSize     := SizeOf(TRebarBandInfoW);
          TRebarInfo.fMask      := RBBIM_SIZE or RBBIM_CHILD or RBBIM_CHILDSIZE or RBBIM_STYLE;
          TRebarInfo.cxMinChild := TRebarRect.Right - TRebarRect.Left;
          TRebarInfo.cyMinChild := TRebarRect.Bottom - TRebarRect.Top + 2;
          TRebarInfo.cx         := 100;
          TRebarInfo.fStyle     := RBBS_CHILDEDGE or RBBS_NOGRIPPER or RBBS_GRIPPERALWAYS;
          TRebarInfo.wID        := ID_SYSREBAR_MENUEX;
          TRebarInfo.hwndChild  := hChildWind;
          SendMessage(hMenuRebar, RB_INSERTBAND, WPARAM(-1), LPARAM(@TRebarInfo));
        end;
      hChildWind := CreateWindowExW(WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, nil, WS_VISIBLE or WS_CHILD or CCS_NODIVIDER or CCS_NORESIZE or CCS_NOPARENTALIGN or TBSTYLE_FLAT or TBSTYLE_TOOLTIPS, 0, 0, 0, 0, hMenuRebar, ID_SYSREBAR_TOOLB, hInstance, nil);
      if (hChildWind <> 0) then
        begin
          GetWindowRect(hChildWind, TRebarRect);
          SendMessageW(hChildWind, TB_BUTTONSTRUCTSIZE, SizeOf(TTBBUTTON), 0);
          SendMessageW(hChildWind, TB_BUTTONCOUNT, 0, 0);
          SendMessageW(hChildWind, TB_ADDBUTTONS, Length(tbButtons), LPARAM(@tbButtons));
          SendMessageW(hChildWind, TB_AUTOSIZE, 0, 0);
          tbBitmap.hInst := 0;
          tbBitmap.nID := ImageBmp;
          SendMessageW(hChildWind, TB_ADDBITMAP, Length(tbButtons), LPARAM(@tbBitmap));
          szBtnText := 'Открыть файл'#0'Извлечь в...'#0'Поиск файлов'#0'Информация'#0'О программе'#0#0;
          //SendMessageW(hChildWind, TB_ADDSTRINGW, 0, LPARAM(szBtnText));
          SendMessageW(hChildWind, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS or TBSTYLE_EX_MIXEDBUTTONS);
          cxIdeal := 0;
          for cxIndex := 0 to SendMessageW(hChildWind, TB_BUTTONCOUNT, 0, 0) - 1 do
            begin
              SendMessageW(hChildWind, TB_GETITEMRECT, WPARAM(cxIndex), LPARAM(@TRebarRect));
              Inc(cxIdeal, (TRebarRect.Right - TRebarRect.Left));
            end;
          ZeroMemory(@TRebarInfo, SizeOf(TRebarInfo));
          TRebarInfo.cbSize     := SizeOf(TRebarBandInfoW);
          TRebarInfo.fMask      := RBBIM_SIZE or RBBIM_CHILD or RBBIM_CHILDSIZE or RBBIM_STYLE;
          TRebarInfo.cxMinChild := TRebarRect.Right - TRebarRect.Left;
          TRebarInfo.cyMinChild := TRebarRect.Bottom - TRebarRect.Top + 2;
          TRebarInfo.cx         := 100;
          TRebarInfo.cxIdeal    := cxIdeal;
          TRebarInfo.fStyle     := RBBS_CHILDEDGE or RBBS_NOGRIPPER or RBBS_GRIPPERALWAYS or RBBS_BREAK;
          TRebarInfo.wID        := ID_SYSREBAR_TOOLB;
          TRebarInfo.hwndChild  := hChildWind;
          SendMessageW(hMenuRebar, RB_INSERTBAND, WPARAM(-1), LPARAM(@TRebarInfo));
        end;
    end;
end;

 
Само окно:

Код:
101 DIALOGEX 0, 0, 200, 10
STYLE DS_FIXEDSYS | WS_POPUP | WS_VISIBLE
CAPTION ""
LANGUAGE LANG_RUSSIAN, 0x1
FONT 8, "MS Shell Dlg"
{
}

 
Когда тыкаем курсором на это окно в ребаре - заголовок программы становится неактивным - понятно что ткнули на другое окно. Но ведь почему оно не полностью дочернее на родителе? Даже если понаставить hMenuRebar вкачестве родителя у CreateDialog, ребар ведь дочерен по отношению окна программы, так почему ребар не выступает вкачестве родителя с загруженном диалогу? Может стили окна еще нужны дополнительные?
 
И еще вопрос. Почему программа начинает потреблять много ЦП с таким кодом?

Код:
    WM_PAINT:
      begin
        GetClientRect(GetDlgItem(hMainApp, ID_LISTVIEW_FILES), lpRect);
        iCount := SendMessageW(GetDlgItem(hMainApp, ID_LISTVIEW_FILES), LVM_GETITEMCOUNT, 0, 0);
        if iCount < 1 then
          begin
            ListDC := GetDC(GetDlgItem(hMainApp, ID_LISTVIEW_FILES));
            SetTextColor(ListDC, GetSysColor(COLOR_WINDOWTEXT));
            SetBkColor(ListDC, GetSysColor(COLOR_WINDOW));
            SetBkMode(ListDC, TRANSPARENT);
            lpRect.Top := lpRect.Top + 25;
            DrawTextW(ListDC, PWideChar(WideString('test')), -1, lpRect, DT_CENTER or DT_WORDBREAK or DT_NOPREFIX or DT_NOCLIP);
            ReleaseDC(GetDlgItem(hMainApp, ID_LISTVIEW_FILES), ListDC);
          end;
        Result := 1;
      end;

Суть: есть листвью и если строк в нем нет - отображаем сообщение что он пустой. Может надо помудрить через BeginPaint? Просто если начать изменять размеры - надпись затирается и даже при перекрытии другим окном с последующим убиранием надпись пропадает с контрола.

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



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

Цитата:
И еще вопрос. Почему программа начинает потреблять много ЦП с таким кодом?

Потому что ты пытаешь в событии WM_PAINT окна перерисовывать контрол. Если надо - то рисуй в его собственном событии по отрисовке (думаю надо ему Owner_Draw делать).
 
Насчет ребара, посмотри тут, попробуй заюзать этот код http://it.inhe.net/richbbs/2006/334/3346780.htm

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

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:32 01-03-2009
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, объясните, плиз:
надо сделать три юникодных константы, делаю так:

Код:
PathAppDataFirm:WideString='\Firm Name';
PathAppDataProg:WideString='\Prog Name';
PathAppData: WideString=PathAppDataFirm+PathAppDataProg+'\';

Компилятор ругается на последнюю строку, мол, ожидается константное выражение. Код компилируется успешно, только если у первых двух констант убрать определение типа. Почему так? И как избежать?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 13:59 01-03-2009
tatuich



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi 2007. Выдается ошибка.
 

Код:
var
  a: 0..3;
begin
  a := ini.ReadInteger('SampleSection', 'SampleValue', 0);
  // допустим в ini-файле указано значение 5
  RadioGroup.ItemIndex := a;
end;

 
Несмотря на то, что у переменной указан диапазон 0..3, переменной все равно присваивается значение 5, хотя логичнее было бы, если бы присвоилось значение либо 0 либо 3. А в RadioGroup всего 4 пункта, а не 6, и поэтому выскакивает ошибка.
 
Проблему решил, но почему так происходит?

Всего записей: 319 | Зарегистр. 20-11-2007 | Отправлено: 14:08 01-03-2009
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
 
Не смотря, что конструкция  
ИмяКонстанты: Тип = Значение
считается константой она на самом деле переменная
с соответствующими последствиями.
 
Добавлено:
DmitryKz
 
Не смотря, что конструкция  
ИмяКонстанты: Тип = Значение
считается константой она на самом деле переменная
с соответствующими последствиями.
 
Добавлено:
tatuich
Ну вопервых для переменной "a" все равно сколько пунктов RadioGroup.
Во вторых под переменую "a" в казаной конструкции выделено памяти как под переменную типа Integer с соответствующим диапазоном возможных значений.
Однако поскольку задано

Цитата:
var  
  a: 0..3;

То компилятор везде где может (имено где может, а в выше указаном месте не может) будет ругатся, если "а" будет присвоено значение в не указанного диапазона.  
При этом допустимо для преременой "а" присваивать все значения из диапазона Integer.

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 14:38 01-03-2009
asdnsd



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят кто знает, возможно ли средствами Delphi (есть ли компоненты) создавать backup к базе данных MS SQL Server? ой немного не в ту тему.

Всего записей: 447 | Зарегистр. 21-05-2007 | Отправлено: 23:35 01-03-2009 | Исправлено: asdnsd, 23:36 01-03-2009
tatuich



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

Цитата:
Ну вопервых для переменной "a" все равно сколько пунктов RadioGroup

Ну это я знаю, поэтому и вылазит ошибка.
 

Цитата:
Во вторых под переменую "a" в казаной конструкции выделено памяти как под переменную типа Integer

То есть ограничить переменную диапазоном 0..3 в данной ситуации никак не получится?

Всего записей: 319 | Зарегистр. 20-11-2007 | Отправлено: 18:16 02-03-2009
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tatuich
Range checking в опциях проекта попробуйте включить.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:34 02-03-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята. Как скроллировать картинку? У меня Image1.AutoSize=True и лежит она на ScrollBox1. Курсор я задал crHandPoint. При нажатии и перетаскивании я делаю:

Код:
procedure TForm1.Image1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
    FDragPoint := Point(X, Y);
end;
 
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    ScrollBox1.ScrollBy(X-FDragPoint.X, Y-FDragPoint.Y);
    FDragPoint := Point(X, Y);
  end;
end;

Однако картинка тресётся как в стиле пьяного мастера! А я хочу чтобы она плавно скролилась. Как это делается? Может кто делал?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 09:31 03-03-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как Вы видите FDragPoint я сохраняю текущий всегда. И вот если я довёл до конца и держу мышку в одном месте, у меня картинка прыгает туда-сюда, будьто бы координаты мышки менялись, а я держу её в одном месте. Это что - глюк виндовс или VCL по разному координаты считает?

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:51 03-03-2009
V1s1ter



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

Цитата:
То есть ограничить переменную диапазоном 0..3 в данной ситуации никак не получится?

1) Если вписать пару строк кода проверки типа if...then, то получится, но думаю Вы этот способ и без меня хорошо знаете.    
 
2) Если воспользоватся предложением Frodo_Torbins

Цитата:
Range checking в опциях проекта попробуйте включить.

То без п.1. приложение будет "вылетать" с ошибкой.
 
3) На самом деле подумайте, а не воюете ли Вы с "мельницами". Насколько я понимаю ini-файл содержит состояние програмного обеспечения, слеловательно должен создаватся автоматически. Таким образом данный файл должен содержать только коректные значения. Я понимаю есть желание создать надежный код, но прежде чем его создавать определитесь насколько надежным он должен быть. Поскольку запросто можно ути в дебри.  

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 12:58 03-03-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