Вопрос № 34917: Уважаемые Эксперты, подскажите пожалуйста способы, с помошью которых можно сохранять RTF файлы в базу данных Access....Вопрос № 34922: Здравствуйте. Есть ли в Delphi функция или процедура
заменяющая символы в строке. Например мне надо в строке "-12.5" символ "." заменить на '',"
Как это возможно реализовать с помощью одной функции/процедуры?<br...Вопрос № 34959: Здравствуйте, эксперты.
Появилась необходимость зделать браузер с ограничиными фанкциями, то есть чтобы не было доступа к жёсткому диску...
Так вот решил я использовать компонент TWebBrowser и всё вроде получалось, но вот возникла проблема: п...Вопрос № 34983: Здравствуйте, Уважаемые эксперты!
Как реализовать в программе на Delphi поддержку горячих клавиш
(Например как завершить программу при нажатии на Ctrl+X)
...
Вопрос № 34.917
Уважаемые Эксперты, подскажите пожалуйста способы, с помошью которых можно сохранять RTF файлы в базу данных Access.
Отвечает: sir henry
Здравствуйте, Дружин Игорь Владимирович!
Можно записать его в BLOB-поле:
(Table1.FieldByName('BlobField') as TBlobField).LoadFromFile('file.rtf');
Однако, если важна будет скорость обработки данных, то лучше сам файл хранить на диске в каком-нибудь каталоге, а в таблицу записать лишь путь к файлу:
RichEdit1.Lines.LoadFromFile(Table1.FieldByName('PathOfFile').AsString);
{Загрузка файла в RichEdit для просмотра}
Ответ отправил: sir henry (статус: Академик)
Отправлен: 07.02.2006, 12:09
Отвечает: Leshiy2006
Здравствуйте, Дружин Игорь Владимирович! Устанавливаете на форме RichEdit делаете его невидимым грузите RTF файл а затем просто переносите текст в DBRichEdit и подтерждаете изменения в базе
Ответ отправил: Leshiy2006 (статус: 1-ый класс)
Отправлен: 07.02.2006, 23:47
Вопрос № 34.922
Здравствуйте. Есть ли в Delphi функция или процедура
заменяющая символы в строке. Например мне надо в строке "-12.5" символ "." заменить на '',"
Как это возможно реализовать с помощью одной функции/процедуры?
Отвечает: sir henry
Здравствуйте, Александр_10289!
Отчего же нету - есть. :)
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Заменяет в строке S подстроку OldPattern на NewPattern.
В Вашем случае можно сделать так:
var
s: string;
Begin
s:='12.5';
s:=StringReplace(S, '.', ',', rfReplaceAll);
End;
Ответ отправил: sir henry (статус: Академик)
Отправлен: 07.02.2006, 12:20
Отвечает: Евгения
Здравствуйте, Александр_10289!
http://www.delphibasics.co.uk/RTL.asp?Name=StringReplace (тут и другие посмотри)
Ответ отправила: Евгения (статус: 1-ый класс)
Отправлен: 07.02.2006, 12:28
Отвечает: Ерёмин Андрей
Здравствуйте, Александр_10289!
Легко:
uses StrUtils;
...
Str:=AnsiReplaceStr(Str,'.',',');
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 07.02.2006, 12:31
Отвечает: Kazakh
Здравствуйте, Александр_10289!
примерно так
s:='-12.5'
pos('.', s) будет равно 4.
Ответ отправил: Kazakh (статус: 3-ий класс)
Отправлен: 07.02.2006, 15:50
Отвечает: Jadd
Здравствуйте, Александр_10289!
Кроме библиотечных функций, можно делать так:
str:='-12.5';
i := Pos('.', str);
if i > 0 then
str[i] := ',';
Примерно так.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 07.02.2006, 16:30
Отвечает: Schmak
Здравствуйте, Александр_10289!
Можно попробовать вот так:
var s:string;
begin
while pos('.',s)<>0 do
s[pos('.',s)]:=','
end.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 07.02.2006, 16:34
Отвечает: Diman_A
Здравствуйте, Александр_10289!
В приложении функция replace, которая делает то, что тебе нужно, и пример использования для строки '-12.5' (заменяем '.' на ',').
Приложение:
Ответ отправил: Diman_A (статус: 5-ый класс)
Отправлен: 07.02.2006, 16:49
Отвечает: REFERI
Здравствуйте, Александр_10289!
Вот я вам составил такую процедуру, т.к. в средствах языка это не предусмотрено.
var s,d: string;
i: integer;
begin
i:=1;
s:='-12.5';
while i
if s[i]='.' then s[i]:=',';
write(s[i]);
i:=i+1;
end;
readln;
end.
--------- Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Практикант)
Отправлен: 07.02.2006, 16:52
Отвечает: Ataman N. N.
Здравствуйте, Александр_10289!
function ChangeSimvol(Str: String; Simvol: Char): String;
var i: Integer;
begin
Result := '';
for i := 1 to Length(Str) do
if Str[i] = Simvol then
Result := Result + Simvol
else
Result := Result + Str[i];
end;
Ответ отправил: Ataman N. N. (статус: 6-ой класс)
Отправлен: 07.02.2006, 17:50
Отвечает: Злоумышленник
Здравствуйте, Александр_10289!
Есть такая партия! Пардон, способ:
procedure TForm1.Button1Click(Sender: TObject);
function ReplaceSub(str, sub1, sub2: String): String;
var
aPos: Integer;
rslt: String;
begin
aPos := Pos(sub1, str);
rslt := '';
while (aPos <> 0) do begin
rslt := rslt + Copy(str, 1, aPos - 1) + sub2;
Delete(str, 1, aPos + Length(sub1) - 1);
aPos := Pos(sub1, str);
end;
Result := rslt + str;
end;
begin
Edit1.Text := ReplaceSub(Edit1.Text, '.', ',');
end;
--------- Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 2-ой класс)
Отправлен: 07.02.2006, 18:13
Вопрос № 34.959
Здравствуйте, эксперты.
Появилась необходимость зделать браузер с ограничиными фанкциями, то есть чтобы не было доступа к жёсткому диску...
Так вот решил я использовать компонент TWebBrowser и всё вроде получалось, но вот возникла проблема: при открытии ссылки в новом окне открывается новое(как ни странно:)) окно Internet Explorer'а. Как мне сделать чтобы новое окно не открывалось, а ссылка по которой хотят перейти открывалось в моём окне(иными словами чтобы все ссылки открывались в одном окне)???
Пожалуйста, помогите, срочно надо!!!!!!
Отвечает: Leshiy2006
Здравствуйте, Dushin Igor! Я бы посоветовал бы такой способ: установите для TWebBrowser свое
PopupMenu или используйте событие OnBeforeNavigate2 там можно получить URL ссылки и разрешить или запретить переход.
Удачи!
Ответ отправил: Leshiy2006 (статус: 1-ый класс)
Отправлен: 07.02.2006, 23:38
Вопрос № 34.983
Здравствуйте, Уважаемые эксперты!
Как реализовать в программе на Delphi поддержку горячих клавиш
(Например как завершить программу при нажатии на Ctrl+X)
Отправлен: 08.02.2006, 03:11
Вопрос задал: Solovej (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Злоумышленник
Здравствуйте, Solovej-Razboynik!
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key = ord('X')) and (ssCtrl in Shift) then Close
end;
Не помешает поставить в инспекторе объектов св-во формы KeyPreview в true
--------- Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 2-ой класс)
Отправлен: 08.02.2006, 03:30 Оценка за ответ: 5
Отвечает: Евгения
Здравствуйте, Solovej!
Cобытие OnKeyPress
Событие OnKeyPress возникает , при нажатии клавиши на клавиатуре
TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;
Параметр Key содержит ASCII код нажатой клавиши.Для клавиш которые
не имеют ASCII кода это событие не наступает.Для обработки таких клавиш
используются события OnKeyUp и OnKeyDown
Для получения ASCII кода нажатой клавиши используется
преобразование Chr(Key)
Пример : if Chr(Key)='A' then ...
Примечание :для того чтобы форма первой получала это событие необходимо
установить свойство формы KeyPreview=true
Cобытие OnKeyDown
Событие OnKeyDown возникает как и событие OnKeyPress ,
при нажатии клавиши на клавиатуре.Но обработчик этого события
получает еще информацию о состоянии клавиш Shift, Alt, Ctrl ,f
а также о нажатой кнопке мыши.Информация о клавишах передается в
параметре key типа Word .Для определения какая именно клавиша нажата
необходимо использовать коды виртуальных клавиш.
Пример определим нажата ли комбинация клавиш Alt+F10
Procedure Tform1.FormKeyDown(Sener ....)
begin
if ((Shift=[ssAlt] and (key=VK_F10)) t hen
ShowMessage('Нажата комбинация клавиш Alt+F10');
end;
Пример :определить нажатие кнопки Insert
if Key=vk_Insert then showMessage('Нажата клавиша Insert');
После того как пользователь отпустил клавишу наступает событие OnKeyUp
Примечание :для того чтобы форма первой получала это событие необходимо
установить свойство формы KeyPreview=true
Cобытие OnKeyUp
Событие OnKeyUp возникает когда пользователь отпустил нажатую клавишу
на клавиатуре ,или мышки. Т .е.оно возникает строго после события
OnKeyDown также как и в OnKeyDown есть возможность получить информацию
о состоянии клавиш Shift, Alt,, Ctrl
Примечание :для того чтобы форма первой получала это событие необходимо
установить свойство формы KeyPreview=true
Приложение:
Ответ отправила: Евгения (статус: 1-ый класс)
Отправлен: 08.02.2006, 03:56 Оценка за ответ: 5 Комментарий оценки: Спасибо за подробный ответ
Отвечает: Diman_A
Здравствуйте, Solovej!
Так происходит обнаружение нажатия клавиш в вашем приложении:
установи keypreview=true!
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
ShiftState: TShiftState);
begin
if (Chr(Key)='X') AND (vk_ctrl in shiftstate) then Close
end;
А вот так - создание системных горячих клавиш (ctrl+alt+F12):
RegisterHotkey(Handle, 1, mod_alt or mod_control, vk_f12);
И их обработка:
procedure TForm1.WMHotkey( var msg: TWMHotkey );
begin
if msg.hotkey = 1 then
begin
close;
BringToFront;
end;
end;
Не забудьте поместить procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY; в секцию private.
Ответ отправил: Diman_A (статус: 5-ый класс)
Отправлен: 08.02.2006, 12:45 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Ерёмин Андрей
Здравствуйте, Solovej!
Ставим Form.KeyPreview = True. Затем событие Form.OnKeyDown:
If (Key = Ord('X')) And (ssCtrl in Shift) Then Form1.Close; Надеюсь, что вы не перепутали горячие и глобальные комбинации клавиш.
Если нужно обрабатывать нажатие клавиш во всей системе, нужно использовать хуки (hooks). Подробные примеры есть во многих документациях - DRKB например.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 08.02.2006, 14:58 Оценка за ответ: 5
Отвечает: Leshiy2006
Здравствуйте, Solovej! Возможны два спосба:
1) Создайте MainMenu в нем пункт "Выход" обрабатываете его Form1.Close;
у пункта меню есть свойство ShortCut;
2) Используйте событие OnKeyDown предварительно установив свойство KeyPreview равны True
if (ssCtrl in Shift) and (chr(key)='X') then Form1.Close;
P.S. в первом способе если меню вам не нужно Вы можете его скрыть.
во втором способе можете вместо Form1.Close; использовать Application.Terminate;
Удачи!
Ответ отправил: Leshiy2006 (статус: 1-ый класс)
Отправлен: 08.02.2006, 23:32 Оценка за ответ: 5