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

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

Автор: ShIvADeSt
Дата сообщения: 10.04.2011 09:19
KorolCOOL
RxDBRichEdit сам в свое время так делал. Без проблем сохранял в акцезе и извлекал потом даже с рисунками. только надо RxLib надо скачать и поставить
Автор: KorolCOOL
Дата сообщения: 10.04.2011 11:28
ShIvADeSt а в MySQL 5 нормально будет сохраняться? Вы мне уже как-то помогали, может помните БД с лабораторками, вот мне необходимо, чтобы отформатирванный текст лабы можно было сохранить и потом выдать на редакцию или просмотр.

И еще 1 вопрос: Этот компонент позволяет созадавать таблицы или вставлять рисунки? Если нет то что посоветуете для этих целей? И как вы сохраняли рисунки в базу? Вместе со всем содержимым RxDBRichEdit или какое-то отдельное поле для них делали? Наверно все-таки отдельное ведь текст и графика это же как-бе разные типы.
Автор: Frodo_Torbins
Дата сообщения: 10.04.2011 12:48
ShIvADeSt
Стандартные контролы тоже могут сохранять в БД, RxDBRichEdit хорош не этим. Его плюс в расширенных возможностях форматирования, в него можно вставлять рисунки. И кстати RxLib сейчас входит в JVCL, так что речь скорее о JvDBRichEdit.
Автор: ShIvADeSt
Дата сообщения: 10.04.2011 15:26
Frodo_Torbins

Цитата:
Его плюс в расширенных возможностях форматирования, в него можно вставлять рисунки.

Может быть и в рисунках отличия, я просто помню мне надо было с рисунками отображать отформатированные документы. Стандартный мне чем то не подошел, а RxDBRichEdit был само то. Поэтому написал про него.

Цитата:
И кстати RxLib сейчас входит в JVCL, так что речь скорее о JvDBRichEdit.

Я до сих пор сижу на Дельфи 5 с последними апдейтами, так что я веду речь о RxLib

Цитата:
И еще 1 вопрос: Этот компонент позволяет созадавать таблицы или вставлять рисунки?

Он позволяет записывать в базу документ в Рич формате, а внутри него может быть все что угодно.

Цитата:
И как вы сохраняли рисунки в базу? Вместе со всем содержимым RxDBRichEdit или какое-то отдельное поле для них делали?

Самое простое - создаешь в ворде документ, потом сохраняешь его как RTF и потом грузишь в базу через rxDBRichEdit.LoadFromFile и сохраняешь запись.

Цитата:
Наверно все-таки отдельное ведь текст и графика это же как-бе разные типы.

Внутри rtf (или doc) - это все может спокойно вместе лежать. Just test it!

Цитата:
ShIvADeSt а в MySQL 5 нормально будет сохраняться?

Я не знаю какие типы данных в мускуле используются, но по идее проблем быть не должно - по идее RTF это обычный текстовый документ с разметкой. Поэтому если поле сделать текстовым, то ртф туда нормально положится. Только размер должен быть большым.
Автор: V1s1ter
Дата сообщения: 10.04.2011 16:06
KorolCOOL

Цитата:
в MySQL 5 нормально будет сохраняться

BLOB поле потерпит все.
Еще посмотри как варианты (особенно в плане в тексте таблиц, так как не все компоненты с ними корректно работают):
WPTools, TRichView, InfoPowerStudio.

Автор: KorolCOOL
Дата сообщения: 11.04.2011 12:22
Теперь возник следующий вопрос. В BLOB можно использовать поиск (по тексту например)? Ведь получается, что это поле в себе хранит файл (или просто двоичные данные, не знаю как грамотней выразиться) а не информацию определенного типа.
Автор: GRom V
Дата сообщения: 11.04.2011 13:59
это:
winexec(PChar('cmd /c net stop slughba'),SW_SHOW);

И
winexec(PChar('net stop slughba'),SW_Show);

Это одинакоГо правильно?
И
Допустим мне нужно ввести последовательно вышеприведенным способом
несколько команд...
Можно ли сделать чтобы следующая команда не выполнялась пока не
выдолнится исходная???
Спасибки...
Автор: V1s1ter
Дата сообщения: 11.04.2011 15:36
KorolCOOL

Цитата:
В BLOB можно использовать поиск (по тексту например)?

Вы собственно сами ответили на вопрос

Цитата:
поле в себе хранит файл (или просто двоичные данные, не знаю как грамотней выразиться) а не информацию определенного типа

Только нужно еще добавить: ... и поэтому все операции связанные с предствалением, поиском и т.п. в BLOB полях реализуются программистом самостоятельно.
Как и какой поиск делать зависит от конкретной решаемой задачи.

Добавлено:
GRom V

Цитата:
Это одинакоГо правильно?

Функция WinExec является устаревший и вместо нее рекомендуется использовать функции ShellExecute или CreateProcess.

Цитата:
Можно ли сделать чтобы следующая команда не выполнялась пока не
выдолнится исходная???

Можно, пример
[more]

Код:
{
Запуск программы и ожидание ее окончания, принудительное завершение по timeout
Uses: Classes, SysUtils, Windows, strUtils, Consts;
}

function ExecuteFileTm(FileName: string; Params: string; Dsk: boolean; TimeOut:
cardinal): boolean;
var
Res: LongBool;
PIn: PROCESS_INFORMATION;
SII: STARTUPINFO;
RetCode: cardinal;
TmOut: cardinal; //In seconds
i: cardinal;
CreationsFlags: cardinal;
begin
TmOut := TimeOut;
try
if Dsk then
begin
CreationsFlags := CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS
or CREATE_UNICODE_ENVIRONMENT;
end
else
begin
CreationsFlags := CREATE_DEFAULT_ERROR_MODE or CREATE_NO_WINDOW
or NORMAL_PRIORITY_CLASS
or CREATE_UNICODE_ENVIRONMENT;
end;
getstartupinfo(SII);
Res := createprocess(
pchar(FileName),
pchar(Params),
nil,
nil,
True,
CreationsFlags,
nil,
pchar(extractfilepath(FileName)),
SII,
PIn);
except
CloseHandle(Pin.hProcess);
ExecuteFileTm := False;
exit;
end;
if not Res then
begin
CloseHandle(Pin.hProcess);
ExecuteFileTm := False;
exit;
end;
i := 0;
RetCode := STILL_ACTIVE;
while (i <= TmOut) and (RetCode = STILL_ACTIVE) do
begin
try
GetExitCodeProcess(Pin.hProcess, RetCode);
except
CloseHandle(Pin.hProcess);
ExecuteFileTm := False;
exit;
end;
Sleep(1000);
inc(i);
end;
if (i > TmOut) and (RetCode = STILL_ACTIVE) then
begin
TerminateProcess(Pin.hProcess, RetCode);
CloseHandle(Pin.hProcess);
// ExecuteFilePrExt:=false;
ExecuteFileTm := false; // ION T
exit;
end;
CloseHandle(Pin.hProcess);
ExecuteFileTm := True;
end;
Автор: Frodo_Torbins
Дата сообщения: 11.04.2011 16:49
GRom V
Посмотрите опции cmd.exe. Там есть возможность передавать сразу несколько строк. Ну или можно временный батник создать.
Автор: ShIvADeSt
Дата сообщения: 12.04.2011 03:57
V1s1ter

Цитата:
Функция WinExec является устаревший и вместо нее рекомендуется использовать функции ShellExecute или CreateProcess.

Для простейших операций запуска WinExec за глаза А вот если требуется дождаться пока внешняя программа отработает, тогда CreateProcess.
Автор: V1s1ter
Дата сообщения: 12.04.2011 12:29
ShIvADeSt
Я всего лишь процитировал рекомендации самой M$ (из-за использования в WinExec старой LoadModul), может в в Вын8 это уже и не будет работать корректно. Но M$ за демократию не хочешь CreateProcess, возьми ShellExecute - совсем не дорого
Автор: ShIvADeSt
Дата сообщения: 13.04.2011 06:33
V1s1ter

Цитата:
Я всего лишь процитировал рекомендации самой M$ (из-за использования в WinExec старой LoadModul), может в в Вын8 это уже и не будет работать корректно. Но M$ за демократию не хочешь CreateProcess, возьми ShellExecute - совсем не дорого

Да это все понятно, просто чем мне нравится WinExec - минимум букв для запуска.
Автор: svs123456789
Дата сообщения: 14.04.2011 11:45
как бы сделать так что бы в таблице в столбце хранились цифры ()номера, а на экран выводились наименования?
нечто вроде TLookupComboBox, но что б подставновочные поля заполнять в рантайм из Strings
Автор: greenpc
Дата сообщения: 14.04.2011 13:12
svs123456789
onDrawDataCell
только проще добавить столбец со строками соотвествующими
если Db то собрать запрос "на лету"
ЗЫ уточните вопрос, а то exel это тоже таблица
Автор: svs123456789
Дата сообщения: 14.04.2011 13:29
greenpc
вот например в аксцессе табличка, в ней столбец чисел (номеров), каждое число обозначает вид изделия, надо чтоб пользователь работал не числами-номерами, а с наименованиями (строка) изделий
(раньше я делал вспомогательную табличку - словарь и использовал дблукапсомбобокс для подстановки)
Автор: ShIvADeSt
Дата сообщения: 14.04.2011 13:42
svs123456789
Я так понимаю, join вам ничего не говорит? Попробуйте его использовать в запросе, меньше велосипедов придется придумывать.
Автор: V1s1ter
Дата сообщения: 14.04.2011 13:55
svs123456789
Уважаемый ShIvADeSt прав, но как альтернативный вариант, без использования запросов можно еще для таблицы (TTable) сделать вычисляемое комбо поле и связать его с таблицей-справочником (TTable, поля такие как ID, Name). Сумбурно, но где то так.
Автор: liron111
Дата сообщения: 14.04.2011 14:11
Уважаемые профессионалы! у меня появилась проблема с DELPHI: Есть форма (TMS_FORM) наследник от TForm, на которой находятся кнопки и 3 Grid'а, Кнопки имеют обработчики, на форме присутствуют еще пару функций по обработке видимости этих кнопок и Grid'ов. Форма (TMS_4_FORM) является наследником формы TMS_FORM, так вот на этой форме TMS_4_FORM при нажатии на кнопку не запускается обработчик, который описан в родителе (TMS_FORM). С чем это может быть связано?
Автор: greenpc
Дата сообщения: 14.04.2011 14:11
svs123456789

Код: select *
from table1 left join Slovar on Slovar.id = table1.code
Автор: liron111
Дата сообщения: 14.04.2011 14:17
Каждой кнопке в наследнике прописать inherited ?
А разве наследник не должен использовать обработчик родителя, если я не переопределяю обработчик?
Автор: svs123456789
Дата сообщения: 14.04.2011 14:25
ShIvADeSt

Цитата:
Я так понимаю, join вам ничего не говорит?

у меня одна таблица и нечего джойнить!
Автор: greenpc
Дата сообщения: 14.04.2011 14:40
svs123456789
через ....

Код: select table.*, iif(table.CODE= 1, 'ONE' , IIF(table.CODE=2 ,'TWO' ,'UNKNOW')) AS name from table
Автор: V1s1ter
Дата сообщения: 14.04.2011 15:06
svs123456789
Чегото я не въехал. Напишите структуру таблице и что конкретно надо, а то мы все тут телепаты, но на отдыхе...
Автор: volser
Дата сообщения: 14.04.2011 22:43
svs123456789
Сделайте локальный датасет (в памяти) и уже на него сделайте лукап.
Автор: KorolCOOL
Дата сообщения: 15.04.2011 14:31
Подскажите пожалуйста какой DataSet использовать для JvDBRichEdit. (Поставил JVCL). При запуске и попытке что-либо напечатать ничего не получается (еще звук такой характерный раздается, типа "ты че втыкаешь?"). Пробовал делать так делать так:

JvQuery
JvDataSource
Ну и JvDBRichEdit.

В query вписал запрос на выборку из поля с типом BLOB. До этого заранее сделал в WordPad'е rtf документ и залил в соответствующее поле. При запуске относительно все идет как положено.

Но в DBRichEdit'е отображаются символы которые были в документе, но помимо них еще куча всякой абракадабры, напоминает разметку HTML, наверно это прибамбасы специфичные для rtf. И самое главное текст как раз то ни ввести, ни отредактировать.

Я подозреваю что это из-за того что DataSet'ом выступает запрос на выборку. Может сделать по событию onChange DBRichEdit'а изменение запроса JvQuery ? Но это больше похоже на костыль. Кто-нибудь знает правильный выход из данной ситуации?

P.S. Еще хочу спросить насчет работы с текстом из DBRichEdit, где можно раздобыть информацию по данному вопросу. На wiki офф сайта еще пока все пусто. В паре имеющихся книг тоже особо ничего не нашел.

Насколько я уловил из справки Дельфы для форматирования текста внутри этого компонента необходимо сделать внешний интерфейс (ну там кнопочки, переключатели ...) с помощью которого пользователь сможет настроить шрифт, размер, отступы и т.д т.п. То есть должно быть похоже на панель в которой на форумах сообщения пишут и добавляют. Поэтому позарез нужна информация как это сбацать.
Автор: Frodo_Torbins
Дата сообщения: 15.04.2011 14:56
KorolCOOL
Вы демку richedit.dpr у себя на компьютере нашли? Делайте все как там.
Что касается датасетов, то их выбор полностью зависит от БД, с которой нужно работать.
Автор: KorolCOOL
Дата сообщения: 16.04.2011 06:28

Цитата:
Вы демку richedit.dpr у себя на компьютере нашли?

Её как бе нету.

Еще хочу спросить можно ли в одном DBRichEdit соединить данные из нескольких полей, если нельзя то с помощью чего можно это сделать?
Т.е я из MySQL базы, из таблицы выбираю 1 строку и мне необходимо соединить данные их двух полей этой строки, причем одно будет с форматированием (BLOB поле), а другое без (просто Text).


Нашел решение (На всякий случай опишу): в простой JvRichEdit сначала потоком загружаю данные из BLOB поля (Запроса JvQuery), а затем методом JvRichEdit.Lines.Insert() все хорошо вставлятся из остальных полей в нужные места.
Автор: RuPurple
Дата сообщения: 17.04.2011 15:33
Имеется форма с компонентом TScrollbox, который содержит только TImage с картинкой. Для того чтобы организовать вертикальную прокрутку Scrollbox колесиком мышки был написан следующий код:
[more]
procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
Scrollbox1.VertScrollBar.Position:= Scrollbox1.VertScrollBar.Position + 5;
end;

procedure TForm1.ScrollBox1MouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
Scrollbox1.VertScrollBar.Position:= Scrollbox1.VertScrollBar.Position - 5;
end;
[/more]
Но почему-то этот код сам по себе не работает. Т.е. он работает только если в Scrollbox поместить, например, кнопку. Но мне кнопка там совсем не нужна. Как заставить Scrollbox обрабатывать события MouseWheelUp и MouseWheelDown?
Автор: greenpc
Дата сообщения: 19.04.2011 07:35
RuPurple
обработать MouseWheel формы

Код: procedure TForm1.FormShow(Sender: TObject);
begin
with Img1.Picture, scrlbx1 do
begin
HorzScrollBar.Range:= Width;
VertScrollBar.Range:= Height;
end;
end;
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
Msg: Cardinal;
Code: Cardinal;
I, ScrollLines: Integer;
ScrollBoxCursosPos: TPoint;
begin //position of the mouse cursor related to TScrollBox
ScrollBoxCursosPos := scrlbx1.ScreenToClient(Mouse.CursorPos);
if (PtInRect(scrlbx1.ClientRect, ScrollBoxCursosPos)) then // мышь(курсор) над ScrollBox
begin
Handled := True;
If ssShift In Shift Then //зажат Shift ?
msg := WM_HSCROLL // да - горизонтально
Else
msg := WM_VSCROLL; // нет - вертикальный скрол
If WheelDelta < 0 Then // направление "кручения" колеса мыши
code := SB_LINEDOWN
Else
code := SB_LINEUP;
ScrollLines:= Mouse.WheelScrollLines * 3; // сколько строк крутим(чувствительность)
for I:= 1 to ScrollLines do // собственно курчение
scrlbx1.Perform(Msg, Code, 0);
scrlbx1.Perform(Msg, SB_ENDSCROLL, 0); // завершение прокрутки
end;
end;

Автор: RuPurple
Дата сообщения: 19.04.2011 14:57
greenpc
Большущее спасибо!
А где можно найти информацию про WM_HSCROLL, WM_VSCROLL, SB_LINEDOWN, SB_LINEUP ?
Почему-то если в обработчике FormShow стоят HorzScrollBar.Range:= Width; VertScrollBar.Range:= Height; то отображается только кусочек картинки. Если я их убираю, то все работает нормально.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


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