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

» Вопросы по Delphi 2

Автор: OrlangurStep
Дата сообщения: 09.05.2006 19:49
Есть 2 вопросы:
1. В delphi7 сталкнулся с такой проблемой: есть несколько полей ввода при нажатии Enter на одной из них выполняется SetFocus на другой но при этом издается какой-то системный звук (Вроде BEEP). Как от этого избавиться?

Код:
procedure TMainForm.longKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0' .. '9': ;
#8: ;
#13: chas.SetFocus;
else key:= chr (0);
end;
end;

procedure TMainForm.chasKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0' .. '9': ;
#8: ;
#13: min.SetFocus;
else key:= chr (0);
end;
end;

procedure TMainForm.minKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0' .. '9': ;
#8: ;
#13: sek.SetFocus;
else key:= chr (0);
end;
end;
Автор: AlxMonster
Дата сообщения: 09.05.2006 19:56
OrlangurStep

Цитата:
в решиме формы bsSingle не сделать неактивными кнопки в углу окна, а сделать их невидимыми; конкретно кнопку развернуть/восстановить, а то она лишнее место занимает


Object Inspector-> выбрать свою форму -> border icons-> bmaximize поставить в false
bminimize ->false - для кнопки свернуть
Чтобы эти кнопки не отрисовывались совсем надо поставить и bmaximize и bminimize в false
Автор: JonyBes
Дата сообщения: 09.05.2006 20:02
1. Подскажите как засунуть в interbase картинку(создавал таблицу в IBExpert тип данных - blob - картинку вставил, в делфи этот столбец определяется как масив, вывести на экран не могу)
2. Как в ADO.NET ПОЛЬЗОВАТЬСЯ Cristal Reports?
Автор: gpi
Дата сообщения: 09.05.2006 20:16
JonyBes
Вывод содержимого blob в TImage

Код: var JPEGStream : TMemoryStream;
JPEG: TJPEGImage;
begin
JPEGStream:=TMemoryStream.Create;
MainDM.TableCoinsPICTURE.SaveToStream(JPEGStream);
JPEGStream.Position:=0;
if JPEGStream.Size>0 then
begin
JPEG := TJPEGImage.Create;
JPEG.LoadFromStream(JPEGStream);
Image1.Picture.Graphic:=jpeg;
JPEG.free;
end;
JPEGStream.Free;
end;
Автор: Sleepwalker
Дата сообщения: 09.05.2006 20:26
pit23

Цитата:
запросы ADOQUERY перестают работать, даже если связь восстанавливается. Необходимо перезапускать программу.


отключение-включение connection помогает?
Автор: AlxMonster
Дата сообщения: 09.05.2006 20:51
JonyBes
Нечто похожее здесь было http://forum.ru-board.com/topic.cgi?forum=33&topic=6746#13
Только там БД Paradox, зато можно было DBImage использовать.
Автор: pit23
Дата сообщения: 10.05.2006 05:26
Sleepwalker


Цитата:
отключение-включение connection помогает?


Пишу следующее:

try
ADOQuery1.Open;
except
on EOleException do
begin
ShowMessage('Связи нет');
ADOConnection1.Connected:=false;
ADOConnection1.Connected:=true;
ADOQuery1.Open;
end;
end;

При втором вызове ADOQuery1.Open все равно выдает ошибку (Ошибка Oracle. Код ошибки означает отсутствие соединения с БД).
Автор: RostY
Дата сообщения: 10.05.2006 09:47
pit23
я попробовал то что ты написал:
1. законектился, открыл ADOQuery
2. Отключил сеть: получил "нет связи" и Exception "ORA-12560 TNS: protocol adapter error" (в ответ на ADOConnection1.Connected:=true;)
3. Включил сеть, опять вызвал процедуру и получил результаты, так что должно у тебя работать

Добавлено:
Единственное:
писал
ADOQuery1.Close; // на всяк случай
try
ADOQuery1.Open;
...
Автор: ReLock
Дата сообщения: 10.05.2006 09:54
Добрый день.

Кидаю на форму две панели: первой панели ставлю свойство: Align := alLeft,
второй панели ставлю свойство: Align := alBottom.
По умолчанию вторая панель захватывает всю нижнюю часть формы.
Вопрос:
Нельзя ли поменять приоритетность, т.е. чтобы первая панель захватила всю левую часть формы от верху до низу, а вторая панель захватила оставшуюся нижнюю часть (не захватывая нижнюю часть, которую захватила первая панель)?
Автор: RomanTim
Дата сообщения: 10.05.2006 10:03
ReLock
Чтобы не париться с приоритетами выравнивания можно так сделать: на форме 2 панели - alLeft и alClient, а уже на второй - панель с alBottom
Автор: JonyBes
Дата сообщения: 10.05.2006 11:35
Люди подскажите как засунуть в interbase картинку(создавал таблицу в IBExpert тип данных - blob - картинку вставил, в делфи этот столбец определяется как масив, вывести на экран не могу)
примеры с другими базами данных не катят!
Автор: ReLock
Дата сообщения: 10.05.2006 11:43
RomanTim
Спасибо. Это хороший вариант.
Автор: pit23
Дата сообщения: 10.05.2006 13:23
RostY

Когда у меня выскакивает ошибка ORA-12560 то связь тоже нормально восстанавливается.

У меня получается такая ситуация:

Открываю прогу, работаю с запросом. Потом при простое программы обрываю связь (выдергиваю кабель), опять пытаюсь выполнить запрос и есно получаю сообщение об ошибке (ORA-03114 - нет связи с базой). Потом опять тыкаю кабель и пытаюсь выполнить код выше написанный мной. В результате два раза при ADOQuery1.Open выдается таже ошибка ORA-03114. Апосля этого помогает тока перезапуск проги. Чего бы нехотелось. Подскажи как быть если это возможно. Заранее огромное спасибо.
Автор: OrlangurStep
Дата сообщения: 10.05.2006 13:33
AlxMonster
Спасибо
Автор: RostY
Дата сообщения: 10.05.2006 16:01
pit23
в ПМ
Автор: STEEL
Дата сообщения: 10.05.2006 21:19
var
str : string;

str := '123';
Напомните плиз как определить что это число?
Автор: gpi
Дата сообщения: 10.05.2006 21:29
STEEL
Из справки Архангельского:
Цитата:

Следующие операторы читают тексты, введенный пользователем в окна редактирования Edit1 и Edit2. Если при перевде строки генерируется исключение, то срабатывают операторы раздела except:

try
С := StrToCurr(Edit1.Text);
R := StrToFloat(Edit1.Text);
I := StrToInt(Edit2.Text);
except
// Перехват исключения при ошибочном числе
on EConvertError do begin
Application.MessageBox('Неверный
формат чисел',
'Исправьте данные',
MB_OK+MB_ICONSTOP);
abort;
end

Оператор

i := StrToIntDef(Edit1.Text,0);

присваивает целой переменной i значение, введенное пользователем в окно Edit1. Если пользователь ввел недопустимое число, значение i будет равно нулю.
Автор: pit23
Дата сообщения: 11.05.2006 10:22
Все уже сам разобрался

Надо писать следующее:


Код: Try
if (ADOConnection1.Connected=TRUE)then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from vesvag where rownum <100');
end
else
begin
while ADOConnection1.Connected = False do
ADOConnection1.Connected := True;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from vesvag where rownum <100');
end;

if (ADOConnection1.Connected=TRUE) then
ADOQuery1.Open
else
begin
while ADOConnection1.Connected = False do
ADOConnection1.Connected := True;
ADOQuery1.Open;
end;

Except
on EOleException do
begin
ADOConnection1.Connected := False;
Application.MessageBox('Нажмите Enter для дальнейшей работы','Потеря коннекта',MB_OK);
end;

End;
Автор: ShamaN
Дата сообщения: 11.05.2006 12:31
Необходимо передать строку в таблицу Word и распечатать документ.

Делаю:

Код:
FileName:=path+'doc1.doc';
form1.WordApplication1.Connect;

WordApplication1.Documents.Open(FileName,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);

WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
WordDocument1.Tables.Item(2).Range.Text:='ТЕКСТ';
WordDocument1.Save;
WordDocument1.PrintOut;
form1.WordApplication1.Disconnect;
Автор: ggrrizzlly
Дата сообщения: 11.05.2006 14:54
ShamaN
Печать документа Word'ом я делаю след. образом:
PrnWord.txtprocedure TfmMain.Print_Doc(DocFile: string);
var
Template, NewTemplate, ItemIndex: OleVariant;
SaveChanges, OriginalFormat, RouteDocument: OleVariant;
begin
try
Template := EmptyParam;
ItemIndex := 1;
WordApplication.Disconnect;
Wordapplication.Connect;
WordApplication.Visible := True;
//WordApplication.Activate;
Template := DocFile;
NewTemplate := False;
WordApplication.Documents.Add(Template, NewTemplate, EmptyParam, EmptyParam);
{Assign WordDocument component}
WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
WordApplication.PrintOutOld;
SaveChanges := WdDoNotSaveChanges;
WordDocument.Close(SaveChanges);
WordApplication.Disconnect;
except
on E: SysUtils.Exception do
begin
ShowMessage('Ошибка при работе с MS Word ! - ' + E.Message); //ErrorDialog(E.Message, E.HelpContext);
WordApplication.Disconnect;
end;
end;
end;
Автор: pit23
Дата сообщения: 11.05.2006 18:31
RostY


Цитата:
в ПМ


Может я глупый, но что это значит ?

Автор: DroN_S
Дата сообщения: 11.05.2006 19:53
pit23

Цитата:
Может я глупый, но что это значит ?

это твой ЛИЧНЫЙ ЯЩИК
находится в верху страницы
Автор: Sergey1970
Дата сообщения: 12.05.2006 16:47
Вопросик, есть примерно 2500 bmp-картинок (порезана карта). Как программно объеденить два (три... и т.д.) изображения в одно? Натолкните на мысль, плз.
Автор: OdesitVadim
Дата сообщения: 12.05.2006 17:09
Sergey1970
Создаём в памяти большой TCanvas и рисуем на нём картинки в нужных позициях.
Позиции скорее всего можно узнать с имени файла (у карт обычно там координаты на сетке)
Автор: Zver1992
Дата сообщения: 14.05.2006 10:46
Есть файл 2.txt . Его нужно открыть и проанализировать 3 строку. Если она равняецца - "TEST" - выполнить что-то. Если нет - то проанализировтаь через 5 сек. С таймерами и функциями я сам вобщем то разберусь. А как с анализатором?
Автор: FireZone
Дата сообщения: 14.05.2006 12:20
Zver1992

Цитата:
Есть файл 2.txt . Его нужно открыть и проанализировать 3 строку. Если она равняецца - "TEST" - выполнить что-то. Если нет - то проанализировтаь через 5 сек. С таймерами и функциями я сам вобщем то разберусь. А как с анализатором?


Код:
var
f: TextFile;
s: String;
i: Integer;
...
AssignFile(f, '2.txt');
reset(f);
try
i := 0; //это будет счетчик строк
while (not eof(f)) and (i < 3) do begin //читаем файл, пока не встретим 3 строку или конец файла
Inc(i); //Увеличиваем счетчик строк
readln(f, s); //Считываем строку в переменную s
if i=3 then //Если строка третья, то проверяем её.
if (s = 'TEST') then begin
{do something}
end else begin
{do something else}
end
end
finally
CloseFile(f)
end
...
Автор: ArtemiyUO
Дата сообщения: 14.05.2006 15:30
ну например воспользоваться классом TStringList
var
sl : TStringList;
begin
sl := TStringList.create;
sl.loadfromfile('2.txt');
if sl.Strings[2] = 'TEST' then
bla-bla-bla
sl.free;
end;
Автор: vserd
Дата сообщения: 15.05.2006 11:34

Цитата:
if sl.Strings[2] = 'TEST' then

if AnsiUpperCase(sl.Strings[2]) = 'TEST' then
так вернее.
Автор: RomanTim
Дата сообщения: 15.05.2006 12:14

Цитата:
if AnsiUpperCase(sl.Strings[2]) = 'TEST' then
так вернее.

Ну а чтобы совсем наверняка , то все это надо в try .. except завернуть - файла может и не быть или он занят, и проверку написать на количество строк в файле
if (sl.Count > 2) and (AnsiUpperCase(sl.Strings[2]) = 'TEST') then
Автор: OdesitVadim
Дата сообщения: 15.05.2006 12:41

Цитата:
if AnsiUpperCase(sl.Strings[2]) = 'TEST' then

А можна ещё лучше написать

Цитата:
if SameText(sl.Strings[2], 'TEST') then

Эта функция сама приведёт к нужному регистру и сравнит строки. Также в этой функции есть третий параметр (начиная с Делфи2005), который позволяет указать локаль

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


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