Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 688
от 23.12.2006, 10:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 416, Экспертов: 66
В номере:Вопросов: 7, Ответов: 11


Вопрос № 67344: Здаравствуйте уважаемые. Подскажите, есть ли какие либо компоненты или библиотеки позволяющие обращатся напрямую к секторам диска? Желательно не зависимо от файловой системы. (fat, ntfs). Буду благодарен за любцю информацию....
Вопрос № 67353: Здравствуйте! Как можно сделать прозрачной всю область формы, на которой нет Image, и при этом один из цветов на Image (н-р белый) тоже должен быть прозрачным...
Вопрос № 67355: Для одного иностранного заказчика понадобилось дату, время, числа и пр. отображать "по-американски". Я изменил установку "Язык и региональные стандарты" в Windows. После этого русские надписи на формах в моих старых программах ста...
Вопрос № 67377: Как получить из файла Access список таблиц?...
Вопрос № 67396: Здравствуйте эксперты. Подскажите пожалуйста компонент типа TImage, но только чтобы он мог содержать в себе другие компоненты. И чтобы в него компоненты в runtime вставлять можно было. Заранее спасибо....
Вопрос № 67442: Уважаемые Эксперты. заранее благодарю. Помогите: вышлите код. Моя программа должна запускать другие приложения(Prougr1.exe Prougr2.exe ...), но не все одновременно, а в определенном порядке: второе(или следующее) приложение не должно запуск...
Вопрос № 67456: Профессионалы! Выручайте. Я уже задавал подобный вопрос, сейчас уточняю... Моя задача: (пример очень грубый, только для понимания задачки) Есть картинка, например, автомобиля. Клиент хочет подобрать цвет для него. Изначально цвет авто - з...

Вопрос № 67.344
Здаравствуйте уважаемые. Подскажите, есть ли какие либо компоненты или библиотеки позволяющие обращатся напрямую к секторам диска? Желательно не зависимо от файловой системы. (fat, ntfs). Буду благодарен за любцю информацию.
Отправлен: 17.12.2006, 11:31
Вопрос задал: monah (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: KiberZero
Здравствуйте, monah!

Вот неплохая подборка компонент для работы с диском http://downloads.ru/win/3436.hts#.

Удачи!
Ответ отправил: KiberZero (статус: 6-ой класс)
Ответ отправлен: 17.12.2006, 12:35
Оценка за ответ: 4
Комментарий оценки:
Компоненты интересные, но не те что требуются.


Вопрос № 67.353
Здравствуйте!
Как можно сделать прозрачной всю область формы, на которой нет Image, и при этом один из цветов на Image (н-р белый) тоже должен быть прозрачным
Отправлен: 17.12.2006, 12:23
Вопрос задал: Томша Павел (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: KiberZero
Здравствуйте, Томша Павел!

Некоторые части формы можно сделать прозрачными (рисунок 7.27). Причем щелчок мыши по прозрачной области формы будет приводить к активизации окон (форм), находящихся за формой. Это достигается установкой свойства TransparentColor в значение True и выбором цвета прозрачности в свойстве TransparentColorValue. Все пиксели формы с цветом TransparentColorValue будут прозрачными.
Например,положите на форму компонент Shape, растяните до размеров формы (Align = alClient), в форме установили свойство TransparentColor в значение True и уравняйте в форме значение свойства TransparentColorValue со свойством Brush.Color компонента Shape. Вот и всё.

Удачи!

Ответ отправил: KiberZero (статус: 6-ой класс)
Ответ отправлен: 17.12.2006, 12:46
Оценка за ответ: 5
Комментарий оценки:
Спасибо, это именно то, что нужно!


Вопрос № 67.355
Для одного иностранного заказчика понадобилось дату, время, числа и пр. отображать "по-американски". Я изменил установку "Язык и региональные стандарты" в Windows. После этого русские надписи на формах в моих старых программах стали отображаться кракозябрами. Это относится к Label, которые созданы на этапе проектирования. Текст, выводящийся программно (например, в grid), отображается нормально.
Удивительно, что после восстановления прежней установки языка ничего не изменилось. Пришлось все Label.Caption переписать.
Подозреваю, что это глюк IDE Delphi, т.к. в других программах ничего подобного не замечено.
Кто-нибудь сталкивался? Как лечить?
WinXP SP2, Delphi-7

Vitaly Grobshtein

Отправлен: 17.12.2006, 12:31
Вопрос задал: Vitaly (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Алтунин Василий Владимирович
Здравствуйте, Vitaly!
Вообще в вопросах локализации нужно подходить к решению проблемы несколько иначе. Для этого нужно создать 2 или больше модулей. Каждый диалог объявить в виде константы и при создании формы все названия и надписи компонентам назначать из констант. Это конечно геморойно, но позволяет без проблем добавить поддержку еще одного языка. Лечить попробуйте, как советуют тут - http://www.delphikingdom.com/asp/answer.asp?IDAnswer=37937

---------
... Дорогу осилит Идущий ...
Ответ отправил: Алтунин Василий Владимирович (статус: 3-ий класс)
Ответ отправлен: 17.12.2006, 15:57
Оценка за ответ: 2
Комментарий оценки:
Меня интересует причина странного поведения Delphi IDE. О способах создания многоязычного интерфейса я знаю, но в данном случае такая задача не стоит.
Вы ответили не на тот вопрос, который был задан.


Вопрос № 67.377
Как получить из файла Access список таблиц?
Отправлен: 17.12.2006, 14:32
Вопрос задал: MasterZ (статус: 7-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, MasterZ!
Список таблиц можно получить так:
Var
st: TStringList;
Begin
st:=TStringList.Create;
ADOConnection1.GetTableNames(st, False);
...
End;

В результате в st будет содержаться список пользовательских таблиц.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 17.12.2006, 14:51

Отвечает: Крылов Александр Владимирович
Здравствуйте, MasterZ!
ADOConnection.GetTableNames(ListBox.Items, False);
Ответ отправил: Крылов Александр Владимирович (статус: 1-ый класс)
Ответ отправлен: 17.12.2006, 15:46
Оценка за ответ: 5
Комментарий оценки:
В BDS 2006 не нашёл StringList, а ListBox выдал ошибки в примере sir henry. В этом всё нормально.


Вопрос № 67.396
Здравствуйте эксперты.
Подскажите пожалуйста компонент типа TImage, но только чтобы он мог содержать в себе другие компоненты. И чтобы в него компоненты в runtime вставлять можно было.
Заранее спасибо.
Отправлен: 17.12.2006, 16:47
Вопрос задал: _Alex_ (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: KiberZero
Здравствуйте, _Alex_!

Прошу прощения, но в вашем вопросе не всё понятно.Если я правильно вас понял, вам нужен компонет, в который можно было бы вставлять другие компоненты, включая картинки и runtime. Такому условию вполне подходит компонент TShape, находящийся на вкладке Additional.

Удачи!
Ответ отправил: KiberZero (статус: 6-ой класс)
Ответ отправлен: 17.12.2006, 17:37
Оценка за ответ: 4
Комментарий оценки:
Мда, с постановкой вопроса у меня плохо.
Вот что я имел ввиду: Мне нужен аналог TImage в который можно было бы вставлять другие компоненты.

Отвечает: Mexes
Здравствуйте, _Alex_!
А почему бы не создать новый компонент от TCustomControl, который в конструкторе создает изображение типа TImage, подогнанное по размерам (Align=alClient) под этот новый компонент? Тогда и изображение будет выведено, и на новый компонент можно будет добавлять другие в рантайме (изображение останется под ними, ведь оно создано самым первым, и первым назначен Parent изображение)...
Ответ отправил: Mexes (статус: 6-ой класс)
Ответ отправлен: 18.12.2006, 12:13


Вопрос № 67.442
Уважаемые Эксперты.
заранее благодарю.
Помогите: вышлите код. Моя программа должна запускать другие приложения(Prougr1.exe Prougr2.exe ...), но не все одновременно, а в определенном порядке: второе(или следующее) приложение не должно запускаться до, того пока ПОЛНОСТЬЮ не загрузится первое(или предыдущее).
Т.е. нужна процедура, которой передаётся путь к Prougr1.exe, и которая возвращающает "истина" после полной загрузки этого приложения.
Отправлен: 17.12.2006, 21:36
Вопрос задал: Lejon (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Lejon!
Программа обычно возвращает какое-либо значение, когда полностью завершается. Для этого подойдет WinAPI-функция WaitForSingleObject (см. MSDN)
Если вам надо дождаться конца какой-то определенной процедуры в программе (например, загрузки), то надо, чтобы загружаемая программа как-то сигнализировала основному приложению о том, что загрузка завершена.
А дальше вариантов много. Например, она будет нажимать на кнопку размером 0x0 пикселей или посылать сигналы процессу...
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 18.12.2006, 11:07
Оценка за ответ: 3
Комментарий оценки:
1) пр-мы ЧУЖИЕ по этому нажимать на кнопку размером 0x0 пикселей или посылать сигналы процессу не будут
2) WaitForSingleObject можно узнать о выключении про-мы, но не о включении её
Я виноват надо было вместо другие приложения писать ЧУЖИЕ.
без оценки...


Отвечает: KiberZero
Здравствуйте, Lejon!

Пожалуй, самый простой способ, - применение таймера TTimer со вкладки System.

Кидаете компонент на вашу форму, устанавливаете значение Timer1.Enabled:=True, Timer1.Interval:=0(так устанавливаете все таймеры), пишите процедуру для обработчика события onTimer, описываете процедуру запуска цикла счёта времени и запускаете проги. Сколько прог, столько и таймеров минус 1, так как первая прога запускается автоматически. Для запуска прог использована функция function WinExec(CmdLine: PChar, CmdShow: Integer): Integer.

Ну вот, пожалуй, всё, дальше смотрите по коду, я всё расписал.

В своём коде я всталял путь к своим программам, поставьте свои.

Возникнут вопросы, спрашивайте.

Удачи!

Приложение:

Ответ отправил: KiberZero (статус: 6-ой класс)
Ответ отправлен: 18.12.2006, 17:40


Вопрос № 67.456
Профессионалы! Выручайте.
Я уже задавал подобный вопрос, сейчас уточняю...
Моя задача: (пример очень грубый, только для понимания задачки)
Есть картинка, например, автомобиля. Клиент хочет подобрать цвет для него. Изначально цвет авто - зеленый. Я хочу открыть ColorDialog, там выбрать другой цвет, и после OK цвет с зеленого поменялся на мой выбранный (машина "перекрасилась").
Я думаю сделать это с помощью изменения конкретного цвета в палитре. То есть, изначально зеленый цвет в палитре картинки - №5, и я изменяю значение RGB этого 5-го цвета. Он становится другой.

Я додумался до такого варианта:
Есть BitMap. У него есть свойство Palette. В HELP-е написано использовать функцию CreatePalette. Как с ней работать? Как изменить конкретный цвет (№5)?

Может кто-то подскажет другой путь?
Получилось сделать кодом, приведенным в Приложении, но это попиксельная закраска. Она, естественно, будет долгой.

И еще: что лучше использовать для хранения и изменения набора картинок: TBitMap (массив), TStringList?

Заранее спасибо всем ответившим!

Приложение:

Отправлен: 17.12.2006, 23:35
Вопрос задал: Antares (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: PaVeL_Ekt
Здравствуйте, Antares!

Про палитру не подмкажу, с ней не работал, но можно сделать по простому
сканированием пикселей:

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
for i:=1 to BitMap.Width do
for j:=1 to BitMap.Height do
begin
if BitMap.Canvas.Pixels[i,j]=4390656 then
begin
BitMap.Canvas.Pixels[i,j]:=clBlue;
end;
end;
form1.Canvas.Draw(0,100,BitMap);
Form1.Paint;
end;

Только нужно учитывать, что при таком сканировании может закраситься все, включяя фон картинки, где найдется пиксель с таким-же цветом.
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 10-ый класс)
Ответ отправлен: 18.12.2006, 10:02

Отвечает: KiberZero
Здравствуйте, Antares!

Я посоветовал бы вам поработать со свойствами и методами компонента TShape. Короче, я долго не разбирался, но если вам надо, я думаю быстро получите нужный результат. Одним словом, кидаете на форму компонент TImage, загружаете туда картинку. Далее, поверх этого компонента накладываете компонент TShape и устанавливаете следующие свойства.

TShape:

Brush.Color=clWhite;
Brush.style="bsClear;"
Pen.Mode=pmMerge;
Pen.style="psClear;"

Ну, разумеется, добавляете компонент TColorDialog и пишите процедуру.

Единственное, что по моему мнению, нужно поработать со свойствами регулировки цвета RGB и добавить, скжем TTrackBar для регулировки насыщенности и светлоты цвета. Возможно, нужно будет пересмотреть уровни чёрно-белого. Вообщем, получится что-то напоминающее на уровни в Photoshop.

Короче, идею я вам подал, осталось закончить, надеюсь, разберётесь как всё это воплотить в жизнь. Если что будет не ясно, спрашивайте. По-моему, это лдин из простейших способом, но эффективный. Можно конечно добавить канву и предварительно кинуть картинку на канву, а потом подвергать изменению с помощью TShape.Я бы мог бы ещё сам углубиться,если честно, не охотно, но если кто там, ваш начальник трует срочно, помогу.В принципе мою идею можно связать с попиксельной закраской,но это уже сложнее и дольше.Так может получиться довольно мощное графическое приложение, правда на пару операций. На этот счёт я вспомнил одну програмку по созданию человеческого лица и его структуры(не помню, как называлась, но помню точно, где-то читал, там именно такой алгоритм был применён).

А код для первоначальной обработки прост, да, он, наверное, у вас набран.

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if ColorDialog1.Execute then
Shape1.Brush.Color:=ColorDialog1.Color;
end;

Удачи!
Ответ отправил: KiberZero (статус: 6-ой класс)
Ответ отправлен: 18.12.2006, 22:55


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.38 от 20.12.2006
Яндекс Rambler's Top100

В избранное