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

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

Автор: MrZeRo
Дата сообщения: 25.04.2008 11:16
Maks150988
Во-первых, TMenuItem - это класс, его нельзя инициализировать таким способом!
Для загрузки строки можно использовать

Цитата:

function LoadStr(Ident: Integer): string;
Description
LoadStr loads the string resource given by Ident from the application's executable file or shared library. If the string resource does not exist, LoadStr returns an empty string.

или через WindowsAPI:

Цитата:

int LoadString(
HINSTANCE hInstance,
UINT uID,
LPTSTR lpBuffer,
int nBufferMax
);

Последней функцией можно грузить не только из текущего exe-файла, но и из какого-нибудь другого или из dll, что может быть удобно для локализации.
Более подробно про работу с ресурсами - в MSDN.
Автор: QWERTYUIOPQQ
Дата сообщения: 25.04.2008 14:12
Необходим HELP!

Возникли две проблемы:
Реализовать в Delphi программно -
1. Добавление, удаление, смена имени,типа, длины поля (полей) в существующей таблице;
2. Сохранение структуры существующего файла, внесение необходимых изменений в структуру, на основе полученной структуры создание новой таблицы, перекачка сведений из существующей таблицы в вновь созданную.

Желательно применительно к DBF - файлу (component Halcyon).

Очень прошу помочь вариантами решения!
Автор: Maks150988
Дата сообщения: 25.04.2008 17:01
Mandor Sawall
Хм... Не получается что-то. Я уже теряюсь в догадках...
Компилятор ругается в
DrawText(lpdis.hDC, @item.Msg[0], - 1, lpdis.rcItem, DT_SINGLELINE or DT_LEFT or DT_VCENTER);
что array type required в @item.Msg[0]
Попробовал не заморачиваясь через ExtTextOut вывести - вместо нормальных названий пунктов меню три буквы RVA на них...

RostY
.))
ymg2000
Тут надо помудрить и скорее всего изврат через SysUtils функции. Одним Api не отделаешься поди...
MrZeRo
Дык вот как сделать-то меню с иконками таким способом? Вставить в массив LoadString не получается. Только из-за этого заштопорилось все...
Автор: Frodo_Torbins
Дата сообщения: 25.04.2008 18:13
Maks150988
"@item.Msg[0]" это случайно не очепятка? Судя по всему должно быть так: "@item[0].Msg"?
Автор: Maks150988
Дата сообщения: 25.04.2008 19:02
Frodo_Torbins
Раньше было из TMenuItem значение text и было там "@item.text[0]". Все нормально было, вот я и по аналогии сделал. Также компилятор ругается и на "@item[0].Msg", хотя спокойно проглатывает "@item.msg". Но тут уже просто словесная белиберда выводится...
Автор: Frodo_Torbins
Дата сообщения: 25.04.2008 21:31
Maks150988
Тогда слишком мало информации. Незнаю что в вашем исполнении означает "@item.msg", но может вы просто неправильно туда пишете?
Автор: Maks150988
Дата сообщения: 25.04.2008 21:40
Frodo_Torbins
Да я уже просто от безысходности по всякому...
А исходный код между прочим доступен. Могли бы и глянуть...
Автор: mauar
Дата сообщения: 27.04.2008 16:20
Как программно сделать запись в поле DBGrid?
Например нужно в поле DBGrid добавить запись программно,
например номер или название города.
Что то у меня не получается, делаю примерно так:

DataModule1.ADOTableLab4.DataSetField('А сдесь должна быть запись в первое поле таблички').Index :=0 ;
Автор: Frodo_Torbins
Дата сообщения: 27.04.2008 23:02
Maks150988
Эх, во-первых версия выложеных исходников уже немного отличается от того, что сейчас есть у вас. А во-вторых бросайте вы этот винапи и переходите на KOL&MCK. Получите тот же обьем экзе намного более простым способом. Или вы затеяли эту прогу ради изучения винапи? Хотя даже в этом случае вам полезно будет взглянуть на KOL.
P.S. Некоторые стандартные модули выполняют инициализацию перед началом работы. Эта инициализация всегда тащит за собой в экзешник довольно порядочный кусок кода. Но ее результаты не всегда используются во время работы. Это я к тому, что если модуль имеет секцию initialization, но вы используете из него всего пару простых функций, то возможно имеет смысл скопировать их к себе, а модуль выкинуть из uses.
Автор: Tantos
Дата сообщения: 28.04.2008 03:37
mauar
Ты совершаешь классическую ошибку - путаешь компоненты манипулирования(редактирования) данными и компоненты отображения данных. В твоем случае советую посмотреть в сторону DBGrid::PickList, либо заносить данные вручную (запрос, DataSet->Insert()/Edit()/Post()).

P.S. Запись добавляется в БД, а не DBGrid .
P.P.S. Хочешь точный ответ - название БД, столбцов и таблиц в студию...
Автор: mauar
Дата сообщения: 28.04.2008 08:48

Цитата:
Tantos


Цитата:
Запись добавляется в БД, а не DBGrid

Я знаю но так надо.
Я уже разобрался, получлось примерно так:
DataModule1.ADOTable1.Insert; // устанавливаем новую строчку
DataModule1.ADOTable1WideStringField1.AsString :='Сдесь мой текст';
DataModule1.ADOTable1.Post; // сохраняем всю табличку сохраняется в БД

Кстати если есть у кого совет как сделать сохранение не всей таблички а
одного поля (ячейки) StringField?
Автор: Tantos
Дата сообщения: 28.04.2008 09:54
mauar
Куда ты хочешь сохранить?

Так. Тогда ничего не понятно... Как ты собрался работать с БД не через БД? В принципе, можно настроить DBGrid на авторедактирование, но, ИМХО, это изврат...
Автор: mauar
Дата сообщения: 28.04.2008 11:10

Цитата:
Куда ты хочешь сохранить?

Читай выше в моей записи там написано. Просто так надо сделать, минуя прямое обращение к БД
Автор: RostY
Дата сообщения: 29.04.2008 08:53
QWERTYUIOPQQ
посмотри из RX компонентов демо-проект DBExpl32
Автор: Maks150988
Дата сообщения: 30.04.2008 05:35
Подскажите куда копать чтобы использовать двойную буферизацию для контрола листвью при изменении его размеров... На наших форумах только один треп, а примеров и нету...
Автор: Czechoslovak
Дата сообщения: 30.04.2008 08:09
Maks150988
ListView1.DoubleBuffered := True;
Автор: Maks150988
Дата сообщения: 30.04.2008 15:44
Czechoslovak
Да не... Сне как-нибудь такое на Апи... Вот нашел какой-то LVS_EX_DOUBLEBUFFER, но список дрожит при изменении размеров. Вероятно это даже и не то...

Хотя вот отрыл какой-то код и попытался переделать:

var
hdcWnd, hdcMem : HDC;
hbmMem, hbmWnd : HBITMAP;
PS : TPaintStruct;
===============================
WM_PAINT :
begin
GetClientRect(hApp, R3);
hdcWnd := BeginPaint(hApp, PS);
hbmMem := CreateCompatibleBitmap(hdcWnd, R3.Right - R3.Left, R3.Bottom - R3.Top);
hdcMem := CreateCompatibleDC(hdcWnd);
hbmWnd := SelectObject(hdcMem, hbmMem);
BitBlt(hbmWnd, 0, 0, R3.Right - R3.Left, R3.Bottom - R3.Top, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, hbmWnd);
DeleteObject(hbmMem);
DeleteDC(hdcMem);
EndPaint(hApp, PS);
end;
WM_ERASEBKGND : Result := TRUE;

Вот... Получилось. Правда насчет корректности кода на очищение памяти не знаю, но вроде бы память не отжирается при изменении размеров.

Еще хотел узнать как динамически изменять положение столбов листвью при изменении размеров окна. Куда копать?
Автор: d617
Дата сообщения: 30.04.2008 19:12
Всем добрый вечер. Прошу помочь новичку в решениии проблеммы "проверка контрольной суммы файла".
До настоящего времени программа была не защищена этой функцией, и ее легко можно было запустить поменяв несколько адресов при помощи Borlanda и Qview.
Прошу помочь разобраться как с этим бороться.
Автор: Frodo_Torbins
Дата сообщения: 30.04.2008 20:06
d617
В Королевстве гляньте: http://www.delphikingdom.com/asp/itemq.asp?mode=1&itemid=8
Автор: daMMned
Дата сообщения: 30.04.2008 21:12
Товарищи, не подскажете как при помощи Delphi 2007 (стандартными кмопонентами) сделать скриншот экрана в формате png?
Автор: Kilich
Дата сообщения: 03.05.2008 00:35
daMMned

Цитата:
Товарищи, не подскажете как при помощи Delphi 2007 (стандартными кмопонентами) сделать скриншот экрана в формате png?


Попробуй воспользоваться компонентами - http://pngdelphi.sourceforge.net/
отлично работают с форматом png
Автор: Celeron
Дата сообщения: 03.05.2008 01:48
mauar

Цитата:
Кстати если есть у кого совет как сделать сохранение не всей таблички а
одного поля (ячейки) StringField?

Табличка вся никогда не сохраняется, а сохраняются изменения к БД, т.е. только записи которые были добавлены/изменены/удалены.
Процесс редактирования можно контролировать также навешивая обработчики событий на DataSet (OnUpdate ...)


Цитата:
Читай выше в моей записи там написано. Просто так надо сделать, минуя прямое обращение к БД

Вообще-то я было делал такое подключение: DBGrid - DataSource - ClientDataSet <- ручная и геморная пересылка данных в/из БД, зато всё под контролем -> ADODataSet - БД. Но нормальным людям это обычно не надо.
Автор: daMMned
Дата сообщения: 03.05.2008 21:27

Цитата:
Попробуй воспользоваться компонентами - http://pngdelphi.sourceforge.net/

ссылко выдало
"This project is about to be removed from sourceforge"
Автор: Kilich
Дата сообщения: 04.05.2008 07:36
daMMned
http://sourceforge.net/project/platformdownload.php?group_id=16012
Автор: mauar
Дата сообщения: 04.05.2008 10:22
В dll кинул word файл в формате RTF а как прописать экспортс из библиотеки и загрузку из неё этого файла в richedit (не важно куда, главное как его из dll прочитать)?
Автор: lerthe61
Дата сообщения: 04.05.2008 11:30
mauar
Что означает "в dll кинул word файл в формате RTF"?
Автор: mauar
Дата сообщения: 04.05.2008 12:05
lerthe61
То и значит, что rtf файл находится в библиотеки, его нужно прочитать из библиотеки, ты хочешь дать умный совет?
Автор: ymg2000
Дата сообщения: 04.05.2008 15:33
mauar
Как ты rtf-файл в dll поместил? Как ресурс?

Автор: mauar
Дата сообщения: 04.05.2008 16:20

Цитата:
Как ты rtf-файл в dll поместил? Как ресурс?

ну да, правой кнопкой мыши по dll добавить файл. вот он в библиотеки а какую процедуру для экспорта прописывать в самой библиотеки подвис. Может напрямую обратиться к библиотеки без процедуры exports в самой библиотеки, что то она не хочет напрямую отдавать файл?
Автор: Maks150988
Дата сообщения: 04.05.2008 17:32
mauar
Вы должны указать хэндл библиотеки, из которой вы будете грузить ресурс. Ну например:
ResLibHandle := LoadLibrary(PChar('Library.dll'));
LoadImage(ResLibHandle, MAKEINTRESOURCE(101), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);

Кстати, в прошлой теме мне приводили пример того как зпихнуть в заголовок мессаджбокса значок. Я вот что-то не искал по интеренету, все никак не найду пример реализации. Пытался через таймер совать значок, но "зачем козе боян" таким способом... ПРиведите пожалуйста еще раз пример, а то в старой теме замучаешься искать...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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