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

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

Автор: Frodo_Torbins
Дата сообщения: 12.06.2011 11:27
momo2000
Код в студию. А вообще вот: http://cybern.ru/delphi-dlya-nachinayushhix-urok-7-usloviya.html
Что касается кликов, то тут нужен динамический массив со списком нажатых ячеек.
Автор: momo2000
Дата сообщения: 12.06.2011 11:55
Frodo_Torbins
с массивом сложно, у меня поверхностые знания delphi(

я хотел потом на клик в ячейке, чтобы был символ 'a' и она будет краситься в чёрный цвет

но вот со столбцами запутался, если делаю так, то
If (Column.FieldName = 'pn' ) and (Column.FieldName = 'vt') then

то ничего не краситься
Автор: Frodo_Torbins
Дата сообщения: 12.06.2011 12:30
momo2000
Вы английский знаете? "And" означает "И". Тоесть: "Если (Колонка.НазваниеПоля = 'pn') и (Колонка.НазваниеПоля = 'vt') тогда". Одновременно Колонка.НазваниеПоля не может иметь два разных значения.
"Или" на английском будет "or".
Вообще если у вас поверхностные знания, то найдите себе какую-нибудь книжку для новичков по делфи, можно старых версий. Тут еще можно поискать информацию: http://www.delphikingdom.com/lyceum/
Автор: momo2000
Дата сообщения: 12.06.2011 13:23
Frodo_Torbins
Кажись сделал, причём нашёл более простой способ


procedure TForm15.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.FieldName = 'pn') then
if (Column.Field.Dataset.FieldbyName('pn').AsString = 'a' ) then
begin
DBGrid1.Canvas.Brush.Color := clblack;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
if (Column.FieldName = 'vt') then
if (Column.Field.Dataset.FieldbyName('vt').AsString = 'a' ) then
begin
DBGrid1.Canvas.Brush.Color := clblack;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;

Спасибо за наводки!

Подскажите ещё, как по клику на ячейке сразу добавить значение, в моём случае букву 'а'

Вот это событие, я так понял

procedure TForm15.DBGrid1CellClick(Column: TColumn);
begin

end;


И можно ли как то сделать событие click правой кнопкой по ячейке или средней кнопкой мыша?
Автор: Frodo_Torbins
Дата сообщения: 12.06.2011 14:21
momo2000
Цитата:
Подскажите ещё, как по клику на ячейке сразу добавить значение, в моём случае букву 'а'
Вы же проверяете значение Column.Field.Dataset.FieldbyName('pn').AsString, присвойте ему новое. Только проследите чтобы в данный момент датасет был в режиме редактирования.

Цитата:
И можно ли как то сделать событие click правой кнопкой по ячейке или средней кнопкой мыша?
Можно. Вешаетесь на OnMouseUp, проверяете значение параметра Button и далее DBGrid1.SelectedField...
Автор: Aladdinych
Дата сообщения: 17.06.2011 07:37
Подскажите плз как можно такое сделать.
Пишу приложение на Delphi 7.
Есть основная форма приложения. Нужно в диалоге набрать текст. Для этого вызывается диаоговая форма, где и происходит набор текста. По окончанию ввода по кнопке форма закрывается. Трудность в следующем:
1. При наборе текста, должна создаваться иллюзия, что текст набирается на рабочем поле основной формы, т.е. диалоговая форма должна быть прозрачной.
2. Панель инструментов для управления свойствами набираемого текста находится в сновной форме, и во время набора текста она обязательно должна быть доступна.
Как такое сделать?
Автор: ShIvADeSt
Дата сообщения: 17.06.2011 09:00
Aladdinych

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

MDI интерфейс либо у второй формы свойство fsStayOnTop (как то так) и вызывать ее через Show а не ShowModal. Но в любом случае придется писать дополнительный код для панели инстументов чтобы она работала и во втором окне тоже (надо определять активное окно).
Автор: Czechoslovak
Дата сообщения: 17.06.2011 10:07
Aladdinych
Так используй просто панель Visible := false\true
Автор: Frodo_Torbins
Дата сообщения: 17.06.2011 10:45
Aladdinych
А зачем вообще нужна такая странная схема? Чем не устраивает набор текста прямо на основной форме приложения?
Автор: V1s1ter
Дата сообщения: 17.06.2011 12:28
Aladdinych
К сожалению не понятно зачем оно Вам такое надо. И не понятно как оно вообще должно выглядеть. Что Вы написали реально сделать, но боюсь, что кода дам рекомендации Вы скажите, а здесь не годится потому, что вот еще условие и т.д. и т.п.
Пример

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

Ну дал я вам код прозрачной формы, а Вы говорите А чего кнопки "Ok" и "Cancel" в воздухе висят, а где заголовок окна за который я могу переместить его в другое место.
Озвучьте цель и шанс получения нормального ответа резко возрастет.
Автор: Aladdinych
Дата сообщения: 17.06.2011 15:29
можно конечно и в основной форме, но у компонента, где вводится текст должен быть прозрачный фон

Добавлено:
а если подробнее - пишу небольшой векторный редактор
на рабочем поле размещаются объекты. среди них и объект текст.
Просто нужно набирать текст так, чтобы он был виден в процессе ввода на фоне этих объектов, а не в некой форме ввода. В процессе ввода текста, надо иметь возможность изменять его свойства. Это надо делать посредством контролов на панели инструментов.
Вот почему тот контрол, где набирается текст должен иметь прозрачный фон
Автор: Frodo_Torbins
Дата сообщения: 17.06.2011 21:19
Aladdinych
В таком случае вам нужен прозрачный edit. Исправить стандартный довольно сложно, хотя найти не очень удачные примеры в интернете можно. Намного более перспективны компоненты, где вся отрисовка реализована с нуля. Что то типа RichMemo, SynEdit и т д. Готовые компоненты с поддержкой прозрачности наверняка есть в пакетах типа TMS или DevEx.
Автор: Aladdinych
Дата сообщения: 18.06.2011 09:42
я пользуюсь компоненктами от tms
но что-то такого не нашел
по крайней мере в палитре tms memo
Автор: V1s1ter
Дата сообщения: 18.06.2011 20:44
Aladdinych
В целом согласен с Frodo_Torbins. Но я не пользую TMS и точно сказать про них не могу, но думаю должно что-то типа свойсва Transparent или Opaque. Если нет таковых попробуйте переписать обработчик что то типа OnCustomDraw.
Но я настоятельно рекомендую глянуть в сторону готовых векторных редакторов. Я не знаю Ваших задач, но знаю, что "аппетит приходит во время еды" и возможно на каком то этапе Ваш код станет слишком загроможден решениями типа прозрачный TEdit.
Автор: Aladdinych
Дата сообщения: 18.06.2011 20:45
точнее прозрачный не edit а memo

Добавлено:
точнее прозрачный не edit а memo
Автор: V1s1ter
Дата сообщения: 18.06.2011 20:52
Aladdinych

Цитата:
точнее прозрачный не edit а memo

Ну это в данном контексте не принципиально.
Еще вариант:
1) В момент создание/редактирования в нужное место ставится Memo и делается видимым.
2) Пользователь редактирует и завершает редактирование.
3) Набранный текст помещается в новый/ранее созданый Label или StaticText, а Memo и делается не видимым.
Автор: krapotkin
Дата сообщения: 20.06.2011 07:15
Aladdinych
я в аналогичном случае просто написал ввод текста "с нуля"
обработать десяток спецклавиш Del Bk Home End PgUp PgDn и т.д. - это не проблема вообще
и никаких заморочек с прозрачными компонентами
если контрол позволяет многострочный текст, то встанет еще и проблема одинаковости отображения строк, переносов и т.д.
Автор: RuPurple
Дата сообщения: 27.06.2011 15:25
Я пишу небольшую программку, которая в процессе работы открывает и проигрывает небольшие видео-файлы (с помощью TMediaPlayer). Для вывода видео используется компонент TPanel:
Код:
MediaPlayer1.Display := Panel1 ;
MediaPlayer1.DisplayRect := Rect(0,0,Panel1.Width,Panel1.Height) ;
MediaPlayer1.Play ;
Автор: akaGM
Дата сообщения: 27.06.2011 18:24
RuPurple
по-видимому, придётся перекрывать paint() панели...
Автор: Frodo_Torbins
Дата сообщения: 27.06.2011 19:38
RuPurple
В зависимости от операционки с формы тоже стирается. Вообще если у вас начинаются подобные проблемы, то чем лепить костыли типа копирования содержимого панели, лучше поискать более продвинутый метод воспроизведения видео.
Автор: RuPurple
Дата сообщения: 27.06.2011 21:19
akaGM
Цитата:
по-видимому, придётся перекрывать paint() формы...
На сколько это сложно? Дело в том, что воспроизведение видео-файлов в этом приложении несет вспомогательную функцию, и поэтому делать что-либо сложное мне бы не хотелось...
Frodo_Torbins
У меня на всех машинах Windows XP стоит, и поэтому я не замечал, что с изображение последнего кадра может стираться и с формы.
Какой наиболее простой, на Ваш взгляд, метод воспроизведения видео можно было бы использовать?
Автор: akaGM
Дата сообщения: 27.06.2011 22:07
RuPurple
да ничего, в общем-то, особенного...
посмотри как это делается для любого контрола в rtl

Цитата:
Дело в том, что воспроизведение видео-файлов в этом приложении несет вспомогательную функцию, и поэтому делать что-либо сложное мне бы не хотелось...

ну и зачем тебе тогда с этим последним кадром так упираться?
Автор: Frodo_Torbins
Дата сообщения: 27.06.2011 22:20
RuPurple
Это смотря что нужно получить.
Можно к примеру использовать ActiveX-контрол виндовсовского WMP. Самое сложное в этом компоненте это установка (у меня бы ушло минуты 3). А использовать его пожалуй даже проще чем стандартный медиаплеер, но и настроек минимум.
Можно наоборот немного посложнее компоненты использовать типа DSPack или BasicVideo. От них, я думаю, без проблем сможете добиться точно того поведения, которое вам нужно.
Автор: RuPurple
Дата сообщения: 28.06.2011 02:28
akaGM
Цитата:
посмотри как это делается для любого контрола в rtl
Можно по-точнее узнать, что и где посмотреть? Что такое rtl?
Frodo_Torbins
Я начал с Windows Media Player. В принципе, он бы вполне устроил, если бы не его характерная панелька с кнопками управления. От нее можно как-нибудь избавиться?
И еще, я не нашел, как удалить установленный мной WMP. Как теперь вернуть вкладку ActiveX в пержнее состояние?
Автор: akaGM
Дата сообщения: 28.06.2011 08:07
RuPurple
файлы в директории:
.../source/Win32/vcl/*.pas

rtl -- run-time library
Автор: Frodo_Torbins
Дата сообщения: 28.06.2011 14:33
RuPurple
С панелькой скорее всего ничего не сделать.
А вот удалить компонент без проблем. Если вы создавали для него отдельный пакет, то просто удалите его из "Component -> Install Packages", или отредактируйте и перекомпилируйте его.
Автор: RuPurple
Дата сообщения: 28.06.2011 15:27
akaGM
Спасибо! Я, правда, плохо понял о чем идет речь, и поэтому использовать предложенный Вами метод не смогу.

Frodo_Torbins
Судя по всему, я установил WMP в уже существующий Borland User Components, во всяком случае в списке Components он там был, причем один. Однако, список Contains пакета dclusr.dpk оказался пустым, т.е. убирать оттуда было нечего. В общем, я удалил весь Borland User Components, и TWindowsMediaPlayer исчез с вкладки ActiveX. Вроде Дельфи пока работает.
Попробую связаться с заказчиком, и если его устроит текущее состояние программы, то оставлю все как есть. Если не устроит, то буду разбираться с BasicVideo.
Очень благодарен Вам!
Автор: Maks150988
Дата сообщения: 28.06.2011 21:18
Привет. Извлекаю сведения из биллинговой системы своего интернет провайдера. необходимо узнать оставшиеся дни до окончания тарифа. Отправляю soap запрос и получаю xml файл. Значение дата/время выглядит как 2011-06-10T12:26:18+04:00 например. Это что за формат представления даты и может быть есть под такую хрень парсеры или куски кода? Ну +4 это походу прибавляют время от гринвича. Но у нас тут регион на московское время перешел и надо +3. Смотрю в их официальнойй программе там вообще не учитывается эта прибавка при вычислении. Так вот может это другое значение или их косяк? Как бы правильно перевести это все в дни и тупо отнять от текущего количества натикавших дней? Наверняка есть велосипеды только найти не могу.
Автор: extasy
Дата сообщения: 28.06.2011 22:43
Maks150988

Цитата:
2011-06-10T12:26:18+04:00


Цитата:
Это что за формат представления даты


В MS это назвали UniversalSortableDateTimePattern
yyyy'-'MM'-'dd HH':'mm':'ss'Z'

yyyy     The year in four digits, including the century.
MM     The numeric month. Single-digit months will have a leading zero.
dd     The day of the month. Single-digit days will have a leading zero.
HH     The hour in a 24-hour clock. Single-digit hours will have a leading zero.
mm     The minute. Single-digit minutes will have a leading zero.
ss     The second. Single-digit seconds will have a leading zero.
zzz     The full time zone offset ("+" or "-" followed by the hour and minutes). Single-digit hours and minutes will have leading zeros. For example, Pacific Standard Time is "-08:00".

http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo%28v=VS.100%29.aspx
http://msdn.microsoft.com/ru-ru/library/system.globalization.datetimeformatinfo%28v=VS.100%29.aspx
Автор: Maks150988
Дата сообщения: 28.06.2011 23:58
extasy
На запрос "Universal Sortable Date delphi" жожель выдает про Delphi.NET классы и методы. Хм, есть что-нибудь простецкое паскалевское? Я ничего тупее копирования в лоб по позициям текста с переводом в интегер для последующего переумножения не придумал.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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