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

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

Автор: Kardinalli
Дата сообщения: 01.04.2009 21:27
Asm64D
Ну вы уж совсем.
Я же ясно сказал - дистрибутив оказался битым. Что непонятного?
Автор: svs123456789
Дата сообщения: 02.04.2009 08:49
TStringGrid как получить значение ячейки по которой кликнул юзер?

procedure TForm1.strngrd1SelectCell(Sender: TObject; ACol, ARow: Integer; var
CanSelect: Boolean);
begin
:= (Sender as TStringGrid).Cells[ACol, ARow];
end;
так ?
Автор: SerGap
Дата сообщения: 02.04.2009 09:10
Всем доброго дня. Может кто подскажет как в runtime прикрутить к RibbonComboBox новый пункт меню и повесить на него какое-либо действие, т.е. чтобы при выборе данного пункта - выполнился бы нужный код ?
Автор: svs123456789
Дата сообщения: 02.04.2009 14:33
в рантайм помещаю данные в TStringGrid, как масштабировать ширину столбцов, что б данные хорошо смотрелись?

во всяких EhLib есть параметры отечающие за автоподбор ширины столбцов ...

а как подбирать размер ячеек в TStringGrid ?
Автор: Frodo_Torbins
Дата сообщения: 02.04.2009 14:55
SerGap
Нужно создать новый Action:

Код: NewActn := TAction.Create(self);
NewActn.Name := 'Action4';
NewActn.OnExecute := Action1Execute;
ActionManager1.AddAction(NewActn, ActionManager1.FindItemByAction(Action1));
Автор: SerGap
Дата сообщения: 02.04.2009 20:17
Frodo_Torbins
Большущее спасибо! Работает!
Автор: ShIvADeSt
Дата сообщения: 03.04.2009 01:38
svs123456789

Цитата:
во всяких EhLib есть параметры отечающие за автоподбор ширины столбцов ...

а как подбирать размер ячеек в TStringGrid ?

Скорее всего ручками, при помощи GetTextExtentPoint32 получаешь длину и высоту текста для контекста (Canvas) грида, а потом увеличиваешь ширину столбца если он недостаточно широк.
Автор: greenpc
Дата сообщения: 03.04.2009 10:05
svs123456789

Код:
with StringGrid1 do begin
for x := 0 to ColCount - 1 do begin
MaxWidth := 0;
for y := 0 to RowCount - 1 do begin
c_width := Canvas.TextWidth(Cells[x,y]);
if c_width > MaxWidth then MaxWidth := c_width ;
end;
ColWidths[x] := MaxWidth + 2;
end;
end;
Автор: Aleksandr_N
Дата сообщения: 03.04.2009 16:34
Вопрос по Delphi 2009

Решил посмотреть его в работе.
В ImageList есть возможность, в отличии допустим от Delphi 7, выбрать изображения формата PNG. Но у меня не поддерживается прозрачность. Может оно так и есть, может неправильно установил, или можно что-то сделать???

Спасибо.
Автор: Frodo_Torbins
Дата сообщения: 03.04.2009 18:20
Aleksandr_N
C ColorDepth поэкспериментируйте.
Автор: Aleksandr_N
Дата сообщения: 03.04.2009 23:56
Frodo_Torbins

Не срабатывает. При значении cdDeviceDependent - чёрный фон, при остальных - белый (не прозрачный).
Автор: ShIvADeSt
Дата сообщения: 04.04.2009 02:51
Aleksandr_N
Есть подозрение что выбрать форма и поддержать все его свойства не одно и тоже. Скорее всего при загрузке в ImageList png конвертируется в обычный битмап и все свойства пнгшки (прозрачность и прочее) теряются. Потому как насколько я помню у ImageList можно получить элемент только как TBitmap. Как вариант - конвертни png в битмап левый верхний пиксель - цвет прозрачности.
Автор: Aleksandr_N
Дата сообщения: 04.04.2009 10:18
ShIvADeSt
Наверное они действительно поленились в ImageList сохранять оригинальные форматы, а не конвертировать всё в Bitmap. А прозрачность PNG и прозрачный фон картинки в ImageList - разные вещи. Поправка: левый НИЖНИЙ угол...
Автор: Frodo_Torbins
Дата сообщения: 04.04.2009 11:40
Aleksandr_N
Еще раз, ставите ColorDepth=cd32Bit, заполняете png-шками. Еще можете DrawingStyle сделать dsTransparent. Все, после этого должно нормально рисоваться.
Автор: Aleksandr_N
Дата сообщения: 06.04.2009 10:44

Цитата:
Еще раз, ставите ColorDepth=cd32Bit, заполняете png-шками. Еще можете DrawingStyle сделать dsTransparent. Все, после этого должно нормально рисоваться.


Так вроде-бы получилось. Короче чем выше версия, тем больше танцев с бубном...
Автор: Frodo_Torbins
Дата сообщения: 06.04.2009 12:32
Aleksandr_N
Просто VCL с каждым разом все сложнее. Одним ведь нужна совместимость, другим - новые фишки.
Автор: relictus
Дата сообщения: 06.04.2009 15:03
Други, помогите решить проблемку. Заключается она в том, что не могу ввести русские буквы с клавиатуры в компонент ESBPCSEdit из набора ESBPCS в портируемом на D2009 проекте, программно - всё ок. Вводимый символ обрабатывается так:

Код: procedure TESBCustomEdit.KeyProcess (var Key: Char);
var
fEnterAsTab: Boolean;
fESCAsUndo: Boolean;
begin
if (Key = #13) then
begin
Key := #0;
if fEnterAsTab then
SendMessage (GetParentForm (Self).Handle, WM_NEXTDLGCTL, 0, 0);
end
else if (Key = #27) and fEscAsUndo then
begin
Key := #0;
Undo;
end
else if (Key = #14) and AllowKbdNull and not ReadOnly then
begin
SetNull (True);
if Assigned (fOnNull) then
fOnNull (Self);
Key := #0;
end
else if Key = ^A then
begin
SelectAll;
Key := #0
end
else if fValidChar <> [] then
begin
{$IFDEF D12AndAbove}
if (Key >= #32) and not CharInSet (Key, fValidChar) then // <---
{$ELSE}
if (Key >= #32) and not (Key in fValidChar) then
{$ENDIF}
begin
Key := #0;
// MessageBeep (0);
end
{$IFDEF D12AndAbove}
else if CharInSet (Key, fValidChar) then
{$ELSE}
else if (Key in fValidChar) then
{$ENDIF}
begin
if fNull then
begin
SetNull (False);
Clear;
end;
end
end
else if (Key >= #32) then
begin
Key := #0;
// MessageBeep (0);
end;
end;
Автор: Frodo_Torbins
Дата сообщения: 06.04.2009 18:43
relictus
CharInSet не предназначен для неанглийских букв. Если нужна проверка, то надо так.
Автор: relictus
Дата сообщения: 06.04.2009 19:31
Frodo_Torbins
Спасибо, вот не знал, что CharInSet такой избирательный
Автор: Aleksandr_N
Дата сообщения: 06.04.2009 21:01

Цитата:
CharInSet не предназначен для неанглийских букв.

Только вот при компиляци почему-то предлагается заменить именно на CharInSet...
Автор: Frodo_Torbins
Дата сообщения: 06.04.2009 21:29
Aleksandr_N

Цитата:
Только вот при компиляци почему-то предлагается заменить именно на CharInSet...

Это не ко мне, я в кодегире не работаю Но тем не менее реализация такова:

Код: function CharInSet(C: WideChar; const CharSet: TSysCharSet): Boolean;
begin
Result := (C < #$0100) and (AnsiChar(C) in CharSet);
end;
Автор: relictus
Дата сообщения: 07.04.2009 08:09
Frodo_Torbins
А не в курсе, после 1-го апдейта (12.0.3210.17555) ничего в этом отношении не поправили? Сейчас вроде уже 12.0.3379.20359 обсуждают в соседней ветке.
Автор: Frodo_Torbins
Дата сообщения: 07.04.2009 16:47
relictus
Код выше я копировал из 12.0.3370.20184. И судя по QC (и прочему) изменений не предвидится. Но зато нашел интересный пример:
Код: [no]case str[i] of
'а'..'я', 'А'..'Я':
Caption := Caption + str1[i];
end;[/no]
Автор: whitewolfs
Дата сообщения: 10.04.2009 01:52
Подскажите, как в дельфи2009 отключить юникод для одного проекта? Может директива компилятора есть? Отлаживать и переписывать заново 20 тысяч строк что то не хочется.
Автор: relictus
Дата сообщения: 10.04.2009 07:35
whitewolfs

Цитата:
как в дельфи2009 отключить юникод для одного проекта?

ИМХО, никак.
Автор: whitewolfs
Дата сообщения: 10.04.2009 10:50

Цитата:
ИМХО, никак.
блин вот засада

Автор: Frodo_Torbins
Дата сообщения: 10.04.2009 17:24
whitewolfs
На самом деле такой переключатель существует. Но его применение дает больше проблем, чем преимуществ.
Автор: ZBEP
Дата сообщения: 10.04.2009 19:14
Здрасте, вообщем такая проблемка:
У меня Unit10.pas занимает 13378 КБ (13.0 МБ)
И при работе в коде 10 формы после 5-10 изменений делфи начинает виснуть на 5-20 сек. (приходится вырезать весь текс кроме нужной процедуры и т.д, вставлять в блокнот, писать процедуру и затем обратно вставлять в делфи вырезанный текст из блокнота).
И компелируется тож долговато.
Всего 59988 строк.
На строчке 400-500 знаков (эт только там где условие, но часть условия(для удобства) переходит на 2 строчку (если все вместить, то будет примерно 35000 строк))
____________________________________
Постараюсь нормально сформулировать что хочу сделать.
Есть часть условия:
if (Edit40.Text<>t1) and (Edit38.Text<>t1) and (Edit36.Text<>t1) and (Edit34.Text<>t1) and (Edit32.Text<>t1) and (Edit30.Text<>t1) and (Edit28.Text<>t1) and (Edit26.Text<>t1) and (Edit24.Text<>t1) and (Edit22.Text<>t1) and (Edit20.Text<>t1) and (Edit18.Text<>t1) and (Edit16.Text<>t1) and (Edit14.Text<>t1) and (Edit12.Text<>t1) and (Edit10.Text<>t1) and (Edit8.Text<>t1) and (Edit6.Text<>t1) and (Edit4.Text<>t1) and (edit2.Text<>t1)
____________________________________
Оно повторяется если быть точным 4200 раз.
Изменяются только "номера\имена" эдитов (только четные от 2 до 240) и "t1" (t2, t3, t4, .. ,t35).
Хотелось бы задать переменную (Например "Z") и присвоить ей это условие, но так чтобы переменные "t1, t2, t3, .. ,t35)" и "имена\номера" эдитов задавались в каждой процедуре (всего 6 процедур), где находится оставшееся часть условия.
Можите подсказать как мне это реализовать?
Зарание спс.
Автор: Aleksandr_N
Дата сообщения: 10.04.2009 19:16
Frodo_Torbins
А в чём проблемы? Если я правильно понял вражеский язык, то можно дописать директиву к модулю и он будет компилироваться по "старому"?
Автор: afiget
Дата сообщения: 10.04.2009 20:10
ZBEP
Использовать цикл с шаког 2.
В цикле TEdit(FindComponent('Edit'+IntToStr(i))).Text

По поводу t1...tN.
Может быть заменить на массив?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


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