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

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

Автор: Dimoniusis
Дата сообщения: 06.10.2008 18:54
Aladdinych

1. Читай про FindWindow и EnumWindows
2. if IsIconic(handle) or (not IsWindowVisible(handle)) then
ShowWindow(handle, SW_RESTORE);

SetForegroundWindow(handle);
SetActiveWindow(handle);

где handle - идентификатор окна.
3 .
procedure SelectMenu(winname, item, subitem: string);
// winname - имя окна, item - имя пункта меню, subitem - имя подпункта
var winhandle, menuhandle, submenuhandle, i, j:integer;
itemname, subitemname:pchar;
begin
winhandle:=FindWindow(nil, pchar(winname));
menuhandle:=GetMenu(winhandle);
getmem(itemname,255);
getmem(subitemname,255);
for i:=0 to getmenuitemcount(menuhandle)-1 do begin
getmenustring(menuhandle, i, itemname, 255, MF_BYPOSITION);
if string(itemname)=item then begin
submenuhandle:=getsubmenu(menuhandle,i);
for j:=0 to getmenuitemcount(submenuhandle)-1 do begin
GetMenuString(submenuhandle, j, subitemname, 255, MF_BYPOSITION);
if string(subitemname)=subitem then
PostMessage(winhandle, WM_COMMAND, makelong(getmenuitemid(submenuhandle,j),0),0);
end;
end;
end;
freemem(itemname);
freemem(subitemname);
end;

Использовать по названию:
SelectMenu(WindowName, 'Конвертация', 'Автоматический режим');

т.е кликнуть "Конвертация" и в нем "Автоматический режим"

4. SendMessage - WM_Char/Wm_text, если знаешь хендлы, либо Keybd_Event для общего случая.
Автор: Mandor Sawall
Дата сообщения: 07.10.2008 08:44
ShIvADeSt
Ну, еще надо добавить, что после протокола может появиться login/password и только тогда идет хост.
Автор: delover
Дата сообщения: 07.10.2008 09:54
anfilat

Цитата:
Каких траблов? Можешь ты пальцем показать, где тут могут получиться проблемы?

Нет проблем, когда я не уверен что код программы абсолютно никому не нужен, когда я не уверен, что к этому коду нет доступа абсолютно никому кроме меня, и когда я не уверен, что код прекрасно читаемый и я смогу вспомнить, что он делает даже по "нетрезвому уму"... Тогда я стараюсь "отделаться" от мудрствований. Опыт показывает, - копипаст свои дела делает, и не всегда обходится без траблов. Это наверное опыт, ничего другого. С точки зрения работоспособности такой техники - всё ок.

Сомневаюсь, что Dm.LoadMsg; работает не в основном потоке.

Цитата:
EnterWorkerThread;
try
Dm.LoadMsg;
finally
LeaveWorkerThread;
end;


Сомневаюсь в примочках типа:

Цитата:
Timer1.Enabled:=false;

Таймер - это очередь сообщений которые Вы можете словить даже после присвоения.

А тут имеется ввиду Мемо который не открывает очередь сообщений?

Цитата:
IdMessage.Clear;
Main.Form1.Memo1.Clear;
IdMessage.NoDecode:=false;
Автор: Aladdinych
Дата сообщения: 08.10.2008 08:47
Dimoniusis

>> SendMessage - WM_Char/Wm_text, если знаешь хендлы
А если я не знаю хендлы элементов управления, есть какой-либо способ их узнать.
Исходников этого приложения у меня естественно нет.
Автор: ViStar
Дата сообщения: 08.10.2008 15:42

Цитата:
Как вы руссифицируете свои приложения?
Раньше писал на Delphi 7, и использовал переводные модули (consts.pas и т.д.) бесплатно предоставленные Polaris Software. В приложениях, в которых нужен русский, я в Search Path указывал путь к русским ресурсам и все.
Сейчас перебрался на Delphi 2007, а переводных модулей нет. Что делать?


Polaris Sofware, а ныне PoleSoft Technologies Group выпустила обновление русификации Delphi: http://polesoft.ru/project/dpasrus
Версия 3.0 для Delphi 2007 и ниже
Автор: Erazer
Дата сообщения: 08.10.2008 16:22
кому нить удалось подружить 2009 и JCL 1.103 Testing Build 3110 ?
у меня не ставится Под конец останавливается на Building RegHelper.dpr...
и выдает System error. Code 2. Не удается найти указанный файл.
До этого стояла и сейчас снова стоит 1.101 и никаких гвоздей, но хочется перехать на 2009 а джедаи не дают
Автор: Diadema
Дата сообщения: 08.10.2008 16:28
Есть доработка для Оутлука. С помощью нее Оутлук при открытии писем с определенным вложением запускает определенную программу и ей на открытие передает эти файлы. Это все работает.
Но Оутлук в "Области чтения" (Reading Pane) пытается так же что-то отобразить и не может, в итоге пишет "Невозможно отобразить элемент в области чтения. Откройте элемент для чтения его содержимого".
Теперь вопрос. Как заставить Оутлук показывать в "Области чтения" текста письма, а не пытаться отобразить содержимое вложенных файлов.

Добавлено:
Почему в этой теме спросите вы. Потому что доработка выполнена на делфи. И видимо в код доработки необходимо внести какие-то изменения.
Автор: Erazer
Дата сообщения: 08.10.2008 17:30
Diadema но ты сначала выясни Как заставить Оутлук показывать в "Области чтения" текста письма, а не пытаться отобразить содержимое вложенных файлов. ", а потом уж когда вопросы по реализации на делфи возникнут пешы суда... а то мусоришь фигней всякой не по теме...
Автор: ShIvADeSt
Дата сообщения: 09.10.2008 02:42
Diadema

Цитата:
Почему в этой теме спросите вы. Потому что доработка выполнена на делфи. И видимо в код доработки необходимо внести какие-то изменения.

Создавай отдельную тему и код на Дельфи в студию. Все остальное без кода будет домыслами.
Автор: DmitryKz
Дата сообщения: 09.10.2008 09:59
Ребята, извините, если вопрос элементарный, но как связываются файлы с узлами TTreeView? Из имеющихся у меня справочных данных я не нашел, как связать свойство Data узла с файлом.
Автор: RomanTim
Дата сообщения: 09.10.2008 10:23
DmitryKz
Например заведи StringList, в него пиши имена фалов, а в Data пиши номер соответствующего элемента StringList
Автор: DmitryKz
Дата сообщения: 09.10.2008 10:40
RomanTim
Спасибо, у меня была такая мысль, но я подумал, может существует какая-то другая "правильная" метода
Автор: Maximus777
Дата сообщения: 09.10.2008 20:22
Подскажите, если кто знает. Как оформить следующий запрос
[more] Close; SQL.Clear;
SQL.Add('select Table1.Наименование, sum(Table3.Количество) as Приход, sum(Table2.Количество) as Расход');
SQL.Add('from Table1');
SQL.Add('inner join Table2 on Table1.key1=Table2.id');
SQL.Add('inner join Table3 on Table1.key1=Table3.id');
SQL.Add('where Дата between #'+FormatDateTime('mm''/''dd''/''yyyy',Date1.Date)+'# and #'+FormatDateTime('mm''/''dd''/''yyyy',Date2.Date)+'#');
SQL.Add('group by Table1.Наименование');
SQL.Add('order by Table1.Наименование');
Open;[/more]
При попытке выполнить пишет "Ошибка синтаксиса, пропущен оператор". Извиняюсь что вопрос не совсем по теме. Пишу в Delphi 10.
Автор: iddqd2
Дата сообщения: 09.10.2008 21:06
Maximus777

SQL.Add('where Дата between #'+FormatDateTime('mm''/''dd''/''yyyy',Date1.Date)+'# and #'+FormatDateTime('mm''/''dd''/''yyyy',Date2.Date)+'#');
А "Дата" к какой таблице относится?

Добавлено:
DmitryKz
Или типа
PRec = ^TREc
TRec = record
FileName : String[200];
........
end;


При создании ноды:
Var
Rec : PRec;
Begin
New(Rec);
REc.FileName := 'sdsdsds';
Node.Data := Rec

Только при удалении ноды/закрытии программы память надо будет очищать. А вообще - рекомендую пользоваться бесплатным VirtualStringTree, чем этим убожеством - я про стандартный TTreeView.
Автор: DmitryKz
Дата сообщения: 09.10.2008 23:33

Цитата:
VirtualStringTree

А где он обитает, что-то не могу найти?
Автор: DmitryKz
Дата сообщения: 10.10.2008 02:04
Нашел под названием VirtualTreeView на _http://www.soft-gems.net
Автор: Maximus777
Дата сообщения: 10.10.2008 04:55
iddqd2

Цитата:
А "Дата" к какой таблице относится?

С датой всё ОК. Таблица акцессовская, mdb. Проблема именно с JOINом. Как связать три таблицы? С двумя получается, а с тремя нет.

Автор: Coltrain
Дата сообщения: 10.10.2008 09:28
Maximus777
Про дату. Имелось ввиду, что в условии Where запроса перед именем поля "Дата"
не прописано имя таблицы. Структуры всех 3 таблиц не видел, но могу догадаться, что поля с именем "Дата" есть наверняка у 2-ой и 3-ей таблицы. И парсер акцесса не знает, для какой таблицы применить это условие. Для случая запроса из двух таблиц поле с именем "Дата" было только у одной таблицы, поэтому запрос отработал.
Автор: delover
Дата сообщения: 10.10.2008 15:10
DmitryKz
Data в узлах, - это аналог лапши доширак, который не всегда удобно употребить спустя годы после готовки. Более правильно (ИМХО) - OnCreateNodeClass, а так - soft-gems.

зы
Никакого подтекста к продуктам быстрой готовки. Они иногда очень кстати, как и лапша.
Автор: Dimoniusis
Дата сообщения: 10.10.2008 17:30
Aladdinych хендлы выделяются системой приложению на этапе создания компонентов.

Хенд окна ищется FindWindow/EnumWindows а хендлы компонентов EnumWindowsEx
Автор: Maks150988
Дата сообщения: 10.10.2008 20:04
Товарищи, снова я с прорисовкой кнопки свертывания в заголовке со стилем toolwindow. Значит переделал переменные для прорисовок состояний кнопки и добавил определение типа ОС. Переменные вроде бы изменяются нормально взависимости от состояний кнопки, но я чего-то не могу оптимизировать функцию прорисовки, а именно задать условия к этим переменным. Запутался немного вобщем. Вобщем кому не сложно помогите пожалуйста. Хотя бы вместе создадим полноценный nonvcl пример реализации для остальных.
Ссылка: http://webdrive.avtograd.ru/Download/Explorer/Download/min_button_toolwnd_2.rar
Собственно необходимо сделать прорисовку в функции PaintMinimizeToolButton, исходя из 3 переменных. Есть конечно закомментированные условия - как-то работают, но "собрать" воедино из таких кусков кода пока не получается - времени слишком мало, да и не такой уж я профессионал-программист, чтобы весь код "вылизать". Что смог - сделал.
Еще как бы выцепить код из модуля Classes для функции Bounds, кто-нибудь посмотрите. Нет у меня pas файлов просто.
И заодно хотелось бы чтобы при нажатии правой кнопки мыши на прорисовываемую кнопку через секунуду состояние нажатия не изменялось.
P.S. Я несколько дней назад практически доделал пример, но сдуру удалил исходники, поэтому приходится заново все это делать, а что и как методом тыка напрограммировал первоначально - не помню.
Вобщем, хочется услышать побольше советов по оптимизации и выноски повторяемого кода в отдельные функции если таковое есть. А то я может что и проглядел и есть лишнее.
Автор: ShIvADeSt
Дата сообщения: 11.10.2008 02:44
Maks150988
Здесь http://forum.ru-board.com/topic.cgi?forum=33&topic=9383&start=640#3 я давал рабочий код, который (насколько я помню) позволял полностью правильно отрисовывать кнопки в различных состояниях.
Кстати
if (Pressed = FALSE and Actived = TRUE and Focused = FALSE) then
лучше записать так
if (NOT Pressed and Actived and NOT Focused) then
смысл булиновских переменных, что они уже имеют значение истина или ложь и делать дополнительное сравнение нет смысла. (Нет смысла сравнивать TRUE=TRUE)
А читать условие можно так (чтобы понимать что написано)
Если ненажата и активна и нефокусена то...
Уточни что конкретно в моем коде тебе не подошло - помогу доработать. Просто опять с начала отслеживать и увязывать все логические переменные - тяжко.
Автор: Maks150988
Дата сообщения: 11.10.2008 08:59
ShIvADeSt
Да, я помню про тот код. Но там вроде нельзя было прорисовывать кнопку кнопку при простом наведении курсора на нее и не все виды прорисовок состояний там были. Ну и вроде бы также немного некорректно обрабатывалось сообщение отжатия левой кнопки мышки. =)
Необходимо доработать обработку условий состояний кнопки в функции PaintMinimizeToolButton - при положениях курсора, нажатости, активности и т.д. Я бы конечно сделал, но я наверное этих состояний штук 10 сделаю, что не есть гуд. Вобщем нужно сделать код для проиисовки кнопки во всевозможных состояниях ее при возможных условиях. ну и заодно проверьте пожалуйста правильно ли выполняются условия булевых переменных в функциях по обработке событий мыши в функции главного диалога.
Автор: ShIvADeSt
Дата сообщения: 11.10.2008 11:11
Maks150988
Держи код, вроде все отладил, все состояния сделал. Кстати если тебе не нужна функция (у тебя таких несколько, то смысл делать ее функцией - лучше процедурой сделать)
[more]

Код:
program sample;

uses
Windows, Messages, Classes, UxTheme, TmSchema;

{$R dialog.res}

var
BtnRect : TRect; // Координаты для кнопки свертывания
WndRect : TRect; // Координаты главного окна
VisTheme : hTheme; // Хэндл открытой темы оформления
hWndApp : THandle; // Хэндл главного диалога приложения
Pressed : Boolean; // Переменная нажатия рисуемой кнопки
Focused : Boolean; // Переменная сфокусированности кнопки
Actived : Boolean; // Переменная активности главного окна
CursorPt : TPoint; // Координаты курсора в главном окне
IsWinXp : Boolean;

function IsOsWindowsXp : Boolean;
var
osVerInfo : TOSVersionInfo;
majorVer : Integer;
minorVer : Integer;
begin
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
begin
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT :
begin
if (majorVer = 5) and (minorVer = 1) then
Result := TRUE
else
Result := FALSE;
end;
else
Result := FALSE;
end;
end
else
Result := FALSE;
end;

// Функция для прорисовки кнопки светтывания в окне программы

procedure PaintMinimizeToolButton;
var
WinDC : HDC;
SizeX : Integer;
SizeY : Integer;
Xframe : Integer;
Yframe : Integer;
begin
GetWindowRect(hWndApp, WndRect);
WinDC := GetWindowDc(hWndApp);
SizeX := GetSystemMetrics(SM_CXSIZE);
SizeY := GetSystemMetrics(SM_CYSIZE);
xFrame := GetSystemMetrics(SM_CXFRAME);
yFrame := GetSystemMetrics(SM_CYFRAME);
BtnRect := Bounds(WndRect.Right - WndRect.Left - xFrame - SizeX - 6, yFrame + 2, SizeX - 12, SizeY - 12);

// Курсор перемещаем над кнопкой с зажатой левой кнопкой мыши
if (Pressed and Actived and Focused ) then
begin
if IsWinXp = TRUE then
begin
if InitThemeLibrary and UseThemes then
DrawThemeBackground(VisTheme, WinDC, WP_MINBUTTON, MINBS_PUSHED, BtnRect, nil);
end
else
DrawFrameControl(WinDC, BtnRect, DFC_CAPTION, DFCS_CAPTIONMIN or DFCS_PUSHED);

end
else
// рисуем горячую кнопку (при наведении) даже если форма не активна
if (NOT Pressed and Focused) then
begin
if IsWinXp = TRUE then
begin
if InitThemeLibrary and UseThemes then
DrawThemeBackground(VisTheme, WinDC, WP_MINBUTTON, MINBS_HOT, BtnRect, nil);
end
else
DrawFrameControl(WinDC, BtnRect, DFC_CAPTION, DFCS_CAPTIONMIN or DFCS_PUSHED);
end
else
// если форма не активна и мышь не на кнопке рисуем неактивную кнопку
if (NOT Actived and NOT Focused) then
begin
if IsWinXp = TRUE then
begin
if InitThemeLibrary and UseThemes then
DrawThemeBackground(VisTheme, WinDC, WP_MINBUTTON, MINBS_INACTIVE, BtnRect, nil);
end
else
DrawFrameControl(WinDC, BtnRect, DFC_CAPTION, DFCS_CAPTIONMIN or DFCS_PUSHED);
end
else


// Обычное состояние кнопки
if IsWinXp = TRUE then
begin
if InitThemeLibrary and UseThemes then
DrawThemeBackground(VisTheme, WinDC, WP_MINBUTTON, MINBS_NORMAL, BtnRect, nil);
end
else
DrawFrameControl(WinDC, BtnRect, DFC_CAPTION, DFCS_CAPTIONMIN);
ReleaseDC(hWndApp, WinDC);
end;

// Функция для загрузки используемой темы оформления

function OpenShellTheme : Boolean;
begin
// Если ОС опознана, загружаем текущую используемую тему
Result:=False;
if IsWinXp then
begin
// Открываем тему, а также проверяем ее использование
if InitThemeLibrary and UseThemes then
VisTheme := OpenThemeData(hWndApp, 'Window');
Result := TRUE;
end;
end;

// Функция для выгрузки используемой темы оформления

function CloseShellTheme : Boolean;
begin
// Если ОС опознана, загружаем текущую используемую тему
Result:=False;
if IsWinXp then
begin
// Открываем тему, а также проверяем ее использование
if InitThemeLibrary and UseThemes then
CloseThemeData(VisTheme);
Result := TRUE;
end;
end;

function MainDlgProc(hWnd : HWND; uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : BOOL; stdcall;
begin
Result := FALSE;
case uMsg of

// Функция обработки инициализации диалогового окна

WM_INITDIALOG :
begin
hWndApp := hWnd;
// Проверяем версию операционной системы
if IsOsWindowsXp then
IsWinXp := TRUE
else
IsWinXp := FALSE;
// Загружаем текущую тему оформления
OpenShellTheme;
end;

// Функция обработки сообщений на изменение темы оформления

WM_THEMECHANGED :
begin
// Если ОС опознана, выгружаем текущую тему оформления
CloseShellTheme;
// Загружаем текущую тему оформления
OpenShellTheme;
end;

// Функция обработки когда окно видимо на экране

WM_PAINT, WM_NCPAINT, WM_NCACTIVATE :
begin
// Выполняем отрисовку кнопки после выполненных условий
PaintMinimizeToolButton;
end;

// Функция обработки когда окно неактивно

WM_ACTIVATE :
begin
if LoWord(wParam) = WA_INACTIVE then
Actived := FALSE
else
Actived := TRUE;
// Выполняем отрисовку кнопки после выполненных условий
PaintMinimizeToolButton;
end;

// Перемещаем курсор над окном

WM_NCMOUSEMOVE :
begin
GetWindowRect(hWndApp, WndRect);
GetCursorPos(CursorPt);
Dec(CursorPt.X, WndRect.Left);
Dec(CursorPt.Y, WndRect.Top);
// Если курсор заходит в координаты рисуемой кнопки
if PtInRect(BtnRect, CursorPt) then
begin
// Кнопка мыши нажата в данный момент
if HiWord(GetAsyncKeyState(VK_LBUTTON)) <> 0 then
begin
Pressed := TRUE;
Focused := TRUE;
end
// Кнопка мыши не нажата в данный момент
else
begin
Pressed := FALSE;
Focused := TRUE;
end;
end
// Указатель не находится в данный момент на кнопке
else
begin
Pressed := FALSE;
Focused := FALSE;
end;
// Выполняем отрисовку кнопки после выполненных условий
PaintMinimizeToolButton;
end;

// Нажали на кнопку
WM_MOUSEMOVE:
begin
if Focused then begin
Focused:=False;
PaintMinimizeToolButton;
end;
end;
WM_NCLBUTTONDOWN:
begin
if GetCapture<>hWndApp then SetActiveWindow(hWnd); // делаем активным наше приложение
GetWindowRect(hWndApp, WndRect);
GetCursorPos(CursorPt);
Dec(CursorPt.X, WndRect.Left);
Dec(CursorPt.Y, WndRect.Top);
if PtInRect(BtnRect, CursorPt) then //нажали конкретно на кнопку
begin
Pressed := TRUE;
Focused := TRUE;
// Выполняем отрисовку кнопки после выполненных условий
PaintMinimizeToolButton;
Result := TRUE; //это чтобы окно не таскалось за кнопочку
end
end;
// Отжали левую кнопку мыши
WM_NCLBUTTONUP :
begin
GetWindowRect(hWndApp, WndRect);
GetCursorPos(CursorPt);
Dec(CursorPt.X, WndRect.Left);
Dec(CursorPt.Y, WndRect.Top);
if PtInRect(BtnRect, CursorPt) then
begin
Focused:=true;
PaintMinimizeToolButton;
if Pressed then messagebox(hwndapp,'press!','text',mb_ok);
end
else
begin
Focused:=false;
end;
Pressed:=False;
end;
WM_NCRBUTTONDOWN:
begin
GetCursorPos(CursorPt);
GetWindowRect(hWndApp, WndRect);
CursorPt := Point(CursorPt.X - WndRect.Left, CursorPt.Y - WndRect.Top);
if PtInRect(BtnRect, CursorPt) then
Result := TRUE;
end;

WM_SIZE :
begin
RedrawWindow(hWndApp, PRect(0), 0, RDW_INVALIDATE);
end;

WM_DESTROY, WM_CLOSE :
begin
// Если ОС опознана, выгружаем текущую тему оформления
CloseShellTheme;
// Посылаем приложению команду завершения работы
PostQuitMessage(0);
end;

end;
end;

begin
// Загружаем диалоговое окно из ресурсов модуля
DialogBox(hInstance, MAKEINTRESOURCE(101), 0, @MainDlgProc);
end.

Автор: Maks150988
Дата сообщения: 11.10.2008 15:47
ShIvADeSt
Спасибо огромное! Вроде все работает нормально.
Только напишите как обзначено MINBS_INACTIVE, а то фиг найдешь в инете без pas файлов.
И кстати для чего Вы используете TmSchema? Просто в 7 делфи его нет и без него все компилируется.
И еще запустил под режимом совместимости и кнопка потеряла оформление. Пришлось вообще убрать проверку на Xp. Я думаю все равно отрисовка правильно сработает уже при условиях от функций InitThemeLibrary и UseThemes.
Автор: max86rus
Дата сообщения: 11.10.2008 17:45
Как в DBGride сделать так, что бы заголовки столбцов(TColumnTitle) в шапке таблицы отображались вертикально или вертикальное выравнивание, проще говоря А то у меня в таблице их очень много, на экран не помещаются

Очень надо.
Автор: ShIvADeSt
Дата сообщения: 12.10.2008 01:56
max86rus
Читать, как переопределить отрисовку столбцов таблицы. Стандартно никак.

Maks150988

Цитата:
Только напишите как обзначено MINBS_INACTIVE, а то фиг найдешь в инете без pas файлов. И кстати для чего Вы используете TmSchema?

MINBS_INACTIVE = 5;
Использую TmSchema так как у меня Дельфи 5 и там нет нативной поддержки тем Windows XP, поэтому юзается компонента Windows XP Theme Manager от Soft Gems. Насчет режима совместимости и потери стиля - все правильно, так как приложение считает, что оно запущено не на Windows XР. При старте часть кнопок еще держит тему, но потом рефреш и кнопки меняют стиль на старый (попробуй сделать окно неактивным и потом активным - кнопка закрыть тоже станет обычной). Вот только поведение надо немного подправить, я там сделал правильно только для тем ХР, а в DrawFrameControl не правил константы поведения кнопки. Но это достаточно просто - сам сделаешь.
Автор: DmitryKz
Дата сообщения: 12.10.2008 20:01

Цитата:
Ребята, извините, если вопрос элементарный, но как связываются файлы с узлами TTreeView? Из имеющихся у меня справочных данных я не нашел, как связать свойство Data узла с файлом.


Цитата:
Например заведи StringList, в него пиши имена фалов, а в Data пиши номер соответствующего элемента StringList

Хм, а ведь свойство Data имеет тип Pointer, соответственно значения типа Integer туда не записать. К сожалению, код модуля формы уже написан почти полностью с использованием TTreeView, переписывать что-то для использования с VirtualStringTree времени совсем нет.
В этом дереве у меня список книг и работ в них (работа и представляет как раз один файл). Дочерние узлы от узла работ - закладки в документах для перехода по главам и разделам в одном документе (файле). Честно говоря, я очень надеялся, что в свойстве Data узла запишу ID файла или ID закладки но, кажись, лопухнулся. Кто-нибудь может что-то посоветовать?
Автор: Frodo_Torbins
Дата сообщения: 12.10.2008 20:52
DmitryKz

Цитата:
Хм, а ведь свойство Data имеет тип Pointer, соответственно значения типа Integer туда не записать.

По моему Pointer, как и Integer, занимает 4 байта. Значит можно использовать приведение типов.
Автор: DmitryKz
Дата сообщения: 12.10.2008 21:02
Frodo_Torbins
А как это сделать для Pointer и Integer? Туда и обратно?

Добавлено:
Кажется, сообразил - pointer(целое) и integer(указатель). Так?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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