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

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

Автор: Frodo_Torbins
Дата сообщения: 20.04.2012 17:27
salexn1
В дополнение к тому, что предложил MrZeRo, можно еще играться с масштабированием через ScaleBy и его близнецов. Но в этом случае возникает две проблемы, во-первых не все сторонние компоненты корректно обрабатывают изменение масштаба. Во-вторых масштабирование вообще то должно работать автоматически если у формы включен Scaled и пользователь изменил соответствующую настройку своей операционки.
Автор: ant0ni02004
Дата сообщения: 20.04.2012 20:00
salexn1

есть еще такой компонент как ResizeKit2
Автор: vintage_1
Дата сообщения: 24.04.2012 13:17
Парни, такой вопрос, у меня в проекте используются две формы: Form1 и Form2
Теперь к вопросу: как сделать, чтобы Form2 была позади Form1 без мерцаний при нажатии на Form2 и чтобы она не перекрывала Form1 при клике на нее?
Автор: salexn1
Дата сообщения: 26.04.2012 17:04
vintage_1
выставить у Form1 StayOnTop (какое-то свойство)

Добавлено:
ant0ni02004
спасибо, глянул....
Не совсем то, что нужно...
Буду курить как сделать
Автор: vintage_1
Дата сообщения: 27.04.2012 13:08
salexn1
уже разобрался
Автор: Gnom3
Дата сообщения: 27.04.2012 15:40
Добрый день. Вопрос - может кто сталкивался - каким образом можно программно управлять DV-камерой, подключенной по IEEE1394? Гугл, собака злая, какие-то неадекватные ответы дает - ничего, что могло-бы помочь.
Автор: V1s1ter
Дата сообщения: 27.04.2012 17:05
Gnom3
Ищите
* спецификация IEC 61883 Consumer audio/video equipment (International Electrotechnical Commission)
* спецификации AV/C (Audio/Video Compatibility)
* спецификация HAVi CTS (Home AV Interoperability)(Command Transaction Set) http://www.havi.org
Автор: Simkara
Дата сообщения: 13.05.2012 22:42
Имеется процедура, которая активируется при нажатии на кнопку. Процедура рисует 3 прямоугольника и заполняет Label каким то числом. Лейблы находятся внутри прямоугольников, т.е. и числа получаются внутри них.

Пример:
http://www.valar.ru/gallery/0512/12.png


Цитата:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var ...
begin
.....

PaintBox1.Canvas.Rectangle(40,60,100,90); //1-й квадрат
Label1.Caption:=IntToStr(a[1]);

PaintBox1.Canvas.Rectangle(245,60,300,90); //2-й квадрат
Label2.Caption:=IntToStr(a[1]);

PaintBox2.Canvas.Rectangle(10,110,50,140); //3-й квадрат
Label3.Caption:=IntToStr(a[1]);
end;


Что нужно:
С помощью Ttimer сделать задержку появления квадратов и чисел. Т.е. сначала появляется первый квадрат и число в label1, затем идет задержка, потом появлется второй квадрат и число в label2, затем задержка, потом появляется третий квадрат и число в label3.

Подскажите пожалуйста, как это выполнить. Т.к. с Ttimer еще не работал =(
Желательно показать в коде.

p.s. еще подскажите, если такая процедура для полной очистки рабочей области PaintBox.
Автор: Corsairs
Дата сообщения: 13.05.2012 23:30
Думаю, проще будет сделать задержку с помощью sleep() Или обязательно надо через таймер?

Просто если делать через Ttimer - тогда надо перенести отрисовку в обработчик таймера, и организовать выбор...
Автор: Simkara
Дата сообщения: 14.05.2012 06:42
Обязательно через таймер.
Выбор можно сделать через case, вот только как взять время за переменную, и собственно как его накручивать?
Автор: Kmich
Дата сообщения: 14.05.2012 08:00
Simkara
проще сделать 3 таймера (если конечно можно) и в каждом по времени настроить время типа в первом 1000 (1с), втором 3000 (3с) и третьем 5000 (5с).

Если время через которое показывать одинаково то можно сделать в таком виде (при условии что Caption у всех Label будет изначально пустым в начале работы или при новом нажатии на кнопку)

procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
timer1.enabled:=false;
if Label1.Caption='' then
begin
PaintBox1.Canvas.Rectangle(40,60,100,90); //1-й квадрат
Label1.Caption:=IntToStr(a[1]);
timer1.enabled:=true;
end;
if Label2.Caption='' then
begin
PaintBox1.Canvas.Rectangle(245,60,300,90); //2-й квадрат
Label2.Caption:=IntToStr(a[1]);
timer1.enabled:=true;
end;
if Label3.Caption='' then
begin
PaintBox2.Canvas.Rectangle(10,110,50,140); //3-й квадрат
Label3.Caption:=IntToStr(a[1]);
end;
end;

а на кнопку навесить
timer1.enabled:=true;

Можно даже время для прорисовки каждого прямоугольника указать если указать его в timer1.interval перед включение таймера timer1.enabled:=true;
Автор: Simkara
Дата сообщения: 14.05.2012 11:07
Нет, таймер должен быть один. Т.к. я написал задачку для примера, на самом деле в моей задачке все сложнее и этим методом потребует 52 таймера. А это как то не айс.
Автор: Frodo_Torbins
Дата сообщения: 14.05.2012 11:27
Simkara
А ничего что квадраты сотрутся как только вы свернете-развернете окно?
Автор: Eternal_Shield
Дата сообщения: 14.05.2012 14:11
Simkara
Заведите глобальную переменную (пусть будет ShowStage). Пофиг где: в классе или, прям так, в implementation; Пусть она будет отражать текущюю стадию или шаг, без разницы. Не забудьте проинициализировать её нулём, ибо в примере всё с нуля;

И в таймере, соотв., обрабатывайте стадию. После прохождения стадии, инкремент ShowStage. Что-то типа:


Код:
procedure TForm234234.Timer....;
begin
case ShowStage of
0: begin
{ рисуем первый квадрат }
PaintBox1.Canvas.Rectangle(40,60,100,90); //1-й квадрат
Label1.Caption:=IntToStr(a[1]);

Inc(ShowStage);
end; // 0
// =====================
1: begin
{ рисуем первый и второй квадраты }
PaintBox1.Canvas.Rectangle(40,60,100,90); //1-й квадрат
Label1.Caption:=IntToStr(a[1]);

PaintBox1.Canvas.Rectangle(245,60,300,90); //2-й квадрат
Label2.Caption:=IntToStr(a[1]);

Inc(ShowStage);
end; // 1
// =====================
2: begin
{ рисуем все квадраты }
PaintBox1.Canvas.Rectangle(40,60,100,90); //1-й квадрат
Label1.Caption:=IntToStr(a[1]);

PaintBox1.Canvas.Rectangle(245,60,300,90); //2-й квадрат
Label2.Caption:=IntToStr(a[1]);

PaintBox2.Canvas.Rectangle(10,110,50,140); //3-й квадрат
Label3.Caption:=IntToStr(a[1]);
end; // 2
// =====================
end; // case ShowStage of
end;
Автор: SevereK20
Дата сообщения: 14.05.2012 14:12
Может кто-нибудь подскажет. В D7 требуется идея для реализации следующего... Есть карта города, которую надо разрезать на районы (разрезается в фотошопе). Далее картинки вставляются в проект в D7 и требуется, чтобы по нажатию на каждую область открывалась форма с данными по этой области. Основная загвоздка в том, что края областей - не ровные линии, а зигзагообразные.. а картинка вставляется как прямоугольник... и идет наложение одних областей на другие... может компонент специальный есть для подобного?..
Автор: Frodo_Torbins
Дата сообщения: 14.05.2012 17:12
SevereK20
Есть: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1386
Автор: SevereK20
Дата сообщения: 14.05.2012 17:16
Frodo_Torbins
спасибо большое.
Автор: Simple Crypt
Дата сообщения: 16.05.2012 12:30
Камрады, вопрос такой.

Access2010 MDB с 2-мя таблицами, Delphi7
SQL-запрос следующий:

UPDATE file_org1 SET [full] = true
WHERE file_org1.name_file in (
SELECT file_org1.name_file FROM file_org1, answer_org2
WHERE (file_org1.id=answer_org2.org1_file) and (answer_org2.full=true)
GROUP BY file_org1.name_file HAVING count(file_org1.name_file)=2);

Суть такова - заполнить поле Full каждой строки таблицы file_org1 в случае, если в связаной таблице file_org2 для этой строки таблицы1 есть 2 строки с заполненными полями full.

Как-то так...

А проблема в том, что в Дельфи вот этот кусок
"WHERE (file_org1.id=answer_org2.org1_file) and (answer_org2.full=true)"
не хочет отрабатываться. "Неопознанная ошибка".

А из самого Access - всё отлично работает.
Как и что можно изменить?
Автор: Frodo_Torbins
Дата сообщения: 16.05.2012 14:03
Simple Crypt
Это же у вас неявный джойн, возможно парсер используемых вами компонент на нем спотыкается. Попробуйте переделайте его на явный.
Автор: Simple Crypt
Дата сообщения: 16.05.2012 14:29

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


Например? SQL-лем занимаюсь настолько редко...
Автор: Frodo_Torbins
Дата сообщения: 16.05.2012 15:00
Simple Crypt
Приблизительно так (внутений запрос):
Код: SELECT file_org1.name_file
FROM file_org1 INNER JOIN answer_org2 ON file_org1.id=answer_org2.org1_file
WHERE answer_org2.full=true
GROUP BY file_org1.name_file
HAVING count(file_org1.name_file)=2
Автор: Simple Crypt
Дата сообщения: 16.05.2012 15:25
Та же ошибка.

Строка подключения:
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + sDBName + ';Persist Security Info=False;Jet OLEDB:Database Password=xxx'
Автор: ant0ni02004
Дата сообщения: 16.05.2012 15:29
Simple Crypt

ParamCheck попробуйте отключить
Автор: Simple Crypt
Дата сообщения: 17.05.2012 13:12
Не помогло.
Автор: diodio
Дата сообщения: 17.05.2012 19:58
Добрый день.
Подскажите, пожалуйста, можно ли как-то быстро удалить n записей в таблице?
У меня древние DBF-ки через BDE.
Запрос

Код: Query1.SQL.Clear;
Query1.SQL.Add(Delete from table_name where zn1 = :param1 and zn2 = :param2);
Query1.ExecSQL;
Query1.Close;
Автор: Varenik
Дата сообщения: 17.05.2012 20:35
diodio
а по полю zn1 Индекс есть?
Автор: diodio
Дата сообщения: 17.05.2012 22:57
Да, создавал так:

Код:
Table1.Active:=False;
Table1.Exclusive:=True;
Table1.Active:=True;
Table1.AddIndex('ind','zn',[]);
Table1.Open;
Автор: Kmich
Дата сообщения: 18.05.2012 07:18
diodio
наверное проще всего будет создать новую таблицу и в нее перенести только нужные строки (там конечно от объема зависит если полей немного и объем данных в строке небольшой), а затем старую завалить и новую переименовать или попробывать воспользоваться компонентами прямого доступа к dbf типа TDBF или Halycon. я на последние перешел для импорта-экспорта dbf на сервер БД быстрее работают чем BDE.
Автор: ant0ni02004
Дата сообщения: 18.05.2012 16:12
diodio

c dbf можна и через ADO работать, совсем без BDE или TDbf
Автор: Gnom3
Дата сообщения: 19.05.2012 15:15
вопрос на грани фола, как говорится. но предистория такова:
На семерке при нажатии сочетания Ctrl-Alt-Del появляется окно - сменить пользователя, диспечер задач, еще какие-то пункты. При этом падает рендер кадров на устройстве iVideoWindow в DirectShow - наверняка кто-то сталкивался с похожим явлением. Для именно видео - достаточно скрыть и снова показать iVideoWindow, чтобы рендер кадров продолжился.
Вопрос - какое сообщение проходит, при появлении этого окна? Как его поймать?
P.S. сообщения WM_QUERYENDSESSION, WM_ENDSESSION, WM_USERCHANGED - не то, полноценного выхода пользователя не происходит, соответственно этих сообщений еще нет.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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