Доброго времени суток! Некая процедура получает в качестве параметра объект типа TImage и, учитывая ширину и высоту полученного объекта, создает некий рисунок. Этот рисунок выводится на данный TImage с помощью StretchDraw. Все работает прекрасно до тех пор, пока я не меняю размер формы, на которой расположен этот TImage. После изменения размера, естественно, меняется значение свойств Width и Height, однако, как оказалось, реальный размер остается прежним. :(( Т.е. к примеру, в начале имеем поле 210х210, увеличивая форму получаем 300х300 выводя на (0,0,300,300) - видим лиш фрагмент рисунка; выводя на (0,0,210,210) - получаем полноценный рисунок. Но, предпологается, что я не знаю начального размера, а Width и Height выдают 300. Как здесь быть? Может я просто не вижу часть поля? Тогда как его заставить менять размеры только в пределах видимости?
Приветствую Вас, Vitally! Ну ессно, что один раз было выполнено натягивание, то потом еще раз натягивать надо. Проще всего установите Stretch:=True; А иначе придется пересчитывать StretchBlt Ответ отправлен: 28.01.2004, 17:37 Отправитель: Boriss Отвечает Pawel
Здравствуйте, Vitally! Timage привязон к форме? Проводится перерисовка Timage после изменения размеров формы? Ответ отправлен: 28.01.2004, 18:43 Отправитель: Pawel Отвечает sir henry
Здравствуйте, Vitally! Попробуйте поставить: TImage.Align:=alClient; {т.е. размер TImage всегда равен размеру клиентской части формы} Ответ отправлен: 29.01.2004, 09:25 Отправитель: sir henry
Вопрос № 1278
Хорошей Вам ОС! Дополнение к вопросу 1277. To Boriss: Strech установлено в true. Если можно, подробнее. И откуда берется число 300 и как получить первоночальный размер (и нужно ли это. Может есть другие пути?!) To Pawel: Да, TImage привязан к форме. После изменения размера происходит перерисовка и растягивание.
Доброе время суток, Vitally! 300? Это у Вас было 300 в 1277! Начальный размер получить можно визуально, Stretch программно установите в FALSE. А можно прочитать из файла. Там у всех форматов есть заголовочные части, где есть такая информация. Вы у меня спрашиваете, нужно ли получить первоначальный размер? :)) - Таки это Вам решать! Другие пути чего? Уточните, пожалуйста. Обязательно найдем :)) Далее. Можно установить Aling:=alClient; И, обрабатывая событие OnResize для формы, вызывать StretchBlt. Ответ отправлен: 29.01.2004, 12:11 Отправитель: Boriss Отвечает THE_PRO
Здравствуйте, Vitally!
Ответ отправлен: 29.01.2004, 13:07 Отправитель: THE_PRO
Вопрос № 1279
Пишу(или страраюсь писать) под Delphi 7/Interbase server 6 Я использую компоненты с палитры InterBase, не до конца еще с ними разобрался. Задача такая : пишу количественно-материальный учет на 10 пользователей(минимум). Две таблицы в 1 базе мне необходимо связать(с этим проблем особых нет) и через определенное количество секунд обновлять данные (таболицы "товары" и "серии"). Объемы : "товары" - 10202 записей, "серии" - свыше 90000 записей. Обновляю через Timer, помещенный на Datamodule, который периодически делает : ------------------------------------- var TmpNumTov: Integer ..... With QrTovar do begin close; open; locate('num_tov',tmpNumTov,[]); end; -------------------------------------- также примерно и с сериями При интерактивном поиске (с помощью
Locate) - тормозит ужасно(из-за таймера). Без него работает нормально. -------------------------------------- Посоветуйте как лучше обновлять данные. -------------------------------------- С компонентом IbTransaction и IbDatabase не особо разобрался, возможно здесь кроется прекрасная для меня разгадка.
Доброе время суток, jiny! Я так понял, что у Вас компонент TQuery. Обновлять его можно так: TQuery.Refresh; Функция Locate работает таким образом: Если есть индекс для искомого поля, то используется этот индекс. Если такого индекса нет, то Locate ищет и так, но время поиска заметно увеличивается :). Так что совет - используйте индекс по полю поиска. Составной индекс тоже не следует использовать, т.к. это увеличивает время поиска. Обновление (Refresh) лучше всего применять не внутри обработки события таймера, а при каком либо значимом действии над таблицей. Например: 1. После редактирования существующей записи; 2. После добавления новой записи; 3. После удаления записи; В этом случае программа не будет делать бессмысленные обновления, когда обновлять то в сущности и нечего. Ответ отправлен: 29.01.2004, 13:28 Отправитель: sir henry
Вопрос № 1280
всем привет! по поводу вопроса 1268, надпомню: мне нужно загрузить в Memo1 нетипизированный файл. я открываю файл побайтно, но это очень медленно. TFileStream и tmemo.lines.loadfromfile('hz') загружают файл не_полностью, только заголовок MZ (если пытаюсь загрузить EXE файл). задача простая, но как её решить?
Здравствуйте, Zensor! А как BlockRead на Ваш вкус? Там точно никакого анализа быть не может, и работать по ДОСовски быстро. Вы пробовали? Ответ отправлен: 29.01.2004, 16:58 Отправитель: Boriss Отвечает THE_PRO
Добрый день, Zensor! Ti xochesh zaqruzit eqo bayti ili chto?...??? Ответ отправлен: 29.01.2004, 16:56 Отправитель: THE_PRO Отвечает Pawel
Добрый день, Zensor! TFileStream ОБРАБАТЫВАЕТ любые фаилы. Другое дело если не все символы корректно обрабатываются memo. Нужно или выкидовать командные символы(по коду)или использовать другой компонент. Ответ отправлен: 30.01.2004, 19:01 Отправитель: Pawel
Вопрос № 1281
Доброе время суток! Попробую еще раз: Итак Image:TImage; Bitmap:TBitmap; Rec:Trect; Картинка рисуется на Bitmap (не загружается из файла, а рисуется LineTo...). Rec.Top:=0; Rec.Left:=0; Rec.Right:= Image.Width; Rec.Bottom:= Image.Height; Далее Bitmap выводится на Image: Image.Canvas.StretchDraw(Rec,Bitmap). При запуске программы Image.Width=Image.Height=210. После нажатия пипочки "Развернуть" Image.Width=Image.Height=300. А область "видимости" остается 210. Т.о. на Image видно только увеличенную левую верхнюю часть от Bitmap. Как cделать, чтобы размер видимой области Image совпадал с самим размером Image? Или как получить размер видимой области. Или как запретить увеличивать размер за пределы видимой области? И почему так происходит: Визуально рисунок стал больше, а значение видимой области остались прежними
- 210?????
Доброе время суток, Vitally! После нажатия на кнопку "Развернуть" нужно сделать перерисовку, т.е. повторить еще раз: "Rec.Top:=0; Rec.Left:=0; Rec.Right:= Image.Width; Rec.Bottom:= Image.Height; Далее Bitmap выводится на Image: Image.Canvas.StretchDraw(Rec,Bitmap)." в соответствии с новыми значениями Image.Width и Image.Height. Ответ отправлен: 30.01.2004, 04:19 Отправитель: sir henry Отвечает THE_PRO
Здравствуйте, Vitally! Image1.Stretch:=true; Ответ отправлен: 30.01.2004, 11:50 Отправитель: THE_PRO Отвечает Boriss
Здравствуйте, Vitally! Я делал просто Picture.LoadFromFile и никаких проблем не видел потом Ответ отправлен: 30.01.2004, 16:02 Отправитель: Boriss Отвечает Pawel
Здравствуйте, Vitally! Необходима повторная перерисовка(я об этом уже писал) или перезагрузка рисунка. Ответ отправлен: 30.01.2004, 18:57 Отправитель: Pawel
Вопрос № 1282
здравствуйте эксперты. дополнение к вопросу №1271 процедура Procedure create_doc(file1,file2:string;paramstr:pchar;kod:word);описана в unit dservice; (кто это изобрёл я не знаю (для эксперта sir henry))есть такое описание Procedure create_doc(file1,file2:string;paramstr:pchar;kod:word); // Процедура создание простого документа на основе // подстановки в тексте текстовых строк на место строк-указателей. // file1 - строка, содержащая имя текстового файла-шаблона. // Файл-шаблон - обычный DOC или RTF текст, содержащий обычные текстовые // строки (определяемые программистом), которые используются в качестве // строк-указателей для последующей замены на смысловой текст. // file2 - имя выходного файла. // paramstr - строка, определяющая способ заполнения шаблона текстовой информацией. // Например, если переменная
paramstr содержит строку '#1|первая строка|#2|вторая строка', // то выполнение процедуры // create_doc('c:hablon.rtf','c:Документ.rtf','#1|первая строка|#2|вторая строка',1); // приведет к замене в тексте "#1" и "#2" на текст "первая строка" и "вторая строка". // kod - способ отображения текста (0,1,2,3)
Здравствуйте, евгений! И все равно такого модуля у меня нет :)). И где партизаны не скажу Ответ отправлен: 30.01.2004, 16:52 Отправитель: Boriss Отвечает Pawel
Доброе время суток, евгений! Можно не отправлять одинаковые письма?
Ответ отправлен: 30.01.2004, 18:55 Отправитель: Pawel
Вопрос № 1283
здравствуйте эксперты. дополнение к вопросу №1271 процедура Procedure create_doc(file1,file2:string;paramstr:pchar;kod:word);описана в unit dservice; (кто это изобрёл я не знаю (для эксперта sir henry))есть такое описание Procedure create_doc(file1,file2:string;paramstr:pchar;kod:word); // Процедура создание простого документа на основе // подстановки в тексте текстовых строк на место строк-указателей. // file1 - строка, содержащая имя текстового файла-шаблона. // Файл-шаблон - обычный DOC или RTF текст, содержащий обычные текстовые // строки (определяемые программистом), которые используются в качестве // строк-указателей для последующей замены на смысловой текст. // file2 - имя выходного файла. // paramstr - строка, определяющая способ заполнения шаблона текстовой информацией. // Например, если переменная
paramstr содержит строку '#1|первая строка|#2|вторая строка', // то выполнение процедуры // create_doc('c:hablon.rtf','c:Документ.rtf','#1|первая строка|#2|вторая строка',1); // приведет к замене в тексте "#1" и "#2" на текст "первая строка" и "вторая строка". // kod - способ отображения текста (0,1,2,3) спасибо.
Здравствуйте, евгений! Поскольку в моем Дельфи7 нет такого модуля, то еще пара нескромных вопросов :))) 1. В состав какого Дельфи он входит? 2. Если это нестандартный модуль, то необходимо указать источник его получения. Обычно возле заголовка Unit пишется для чего модуль предназначен и кто его изобрел. Извините, если разочаровал Вас своим вопросом, но эксперты тоже не все на свете знают :))). Ответ отправлен: 30.01.2004, 04:33 Отправитель: sir henry Отвечает Boriss
Приветствую Вас, евгений! Вы можете задать вопрос и четыре раза, но у меня Delphi 7 - и нет в нем такого модуля. Написали бы хотя б откуда взяли таковой dservice. Явно, ВЫ скачали какой-то компонент, но не описание к нему Смысл строк понятен, но гадать не хочется ;)) Ответ отправлен: 30.01.2004, 16:43 Отправитель: Boriss Отвечает Pawel
Доброе время суток, евгений! Такого модуля(dservice) нет в delphi 1-7; Ответ отправлен: 30.01.2004, 18:54 Отправитель: Pawel
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.