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

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

Автор: Frodo_Torbins
Дата сообщения: 30.07.2010 08:40
gx90
Смотря какая делфи. В Delphi 2010 это делается нажатием Ctrl+D. В более ранних надо ставить эксперты типа JCF или DelForEx.
Автор: vdpa
Дата сообщения: 30.07.2010 20:21
Frodo_Torbins спасибо огромное!

Автор: snike555
Дата сообщения: 03.08.2010 06:17
gx90
Можно руками в ходе программирования ctrl + I и ctrl + U выделенный кусок текста.
Автор: gx90
Дата сообщения: 03.08.2010 21:00
Frodo_Torbins, snike555 - спасибо!
Автор: JohnSilver182
Дата сообщения: 04.08.2010 11:36
Hi All

D7 : Форма перестала запоминать свойства выставленные в Дезайн тайм
закрываеш и открывает проект , все слетает

Прямо в DFM проблемной формы смотрю, после закрытия D7 все ОК

Код: object dxBarManagerMain: TdxBarManager
ImageOptions.Images = DM.cxImageListMain
Автор: salexn1
Дата сообщения: 04.08.2010 12:16
Открой сначала DM модуль, а потом форму проблемную... Ну а лучше всего - выставляй в ран-тайм... Понимаю, что в дизайн проще, но убережешь себя от того, что некоторые свойства будут слетать
Автор: JohnSilver182
Дата сообщения: 04.08.2010 12:52

Цитата:
Открой сначала DM модуль, а потом форму проблемную... Ну а лучше всего - выставляй в ран-тайм...

1) Непонял , DM модуль и Форма в одном ведь проекте
2) В Ран тайм можно , но мне например надо видеть картинки в Главном меню .
3) А вдруг это выйдет боком потом
Автор: salexn1
Дата сообщения: 04.08.2010 13:39
1. Ну и что, что в одном проекте... DM не открывается и форма не может подтянуть его компоненты вот и слетают настройки
2. Можете как и в дизайн-тайм так и в ран-тайм выставлять.
3. Выйдет плохо только если в дизайн-тайм оставить. В ран-тайм - ничего не выйдет плохого (если конечно правильные выставить)
Автор: JohnSilver182
Дата сообщения: 04.08.2010 13:55
salexn1 А может DFM описание проблемной формы как то порушиться ???
Автор: salexn1
Дата сообщения: 04.08.2010 14:33
Не понял вопрос?
Автор: JohnSilver182
Дата сообщения: 04.08.2010 14:39
salexn1
Ну описание свойств у формы . Может как то повредилось.


Цитата:
object FormMain: TFormMain
Left = 266
Top = 221
Width = 981
Height = 559
Caption = #1040#1073#1086#1085#1077#1085#1090' 8'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -10
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsMDIForm
OldCreateOrder = False
Position = poScreenCenter
Visible = True
WindowState = wsMaximized
Автор: salexn1
Дата сообщения: 04.08.2010 15:16

Цитата:
Прямо в DFM проблемной формы смотрю, после закрытия D7 все ОК

Это же вы писали. Значит все ок.

У 7 Delphi (не знаю как в версиях постарше) это "нормально", когда слетают настройки контролов, свойства которых лежат на других формах\модулях. Сам не раз нарывался. Потом устал бороться и сделал все в ран-тайм. Точнее, только те, которые лежат на ДРУГИХ модулях: в частности привязку всех Images к action, toolbars и т.д., DataSet с DataSource и т.д. и т.п.

З.Ы.
Кстати и в Java и в C# там сделано "имхо" умнее: все переводится в ран-тайм код
Автор: Aladdinych
Дата сообщения: 06.08.2010 08:06
Нужно решить такую задачу.
Имеется файл где хранится библиотека картинок. Файл большого размера ~ 600 мб.
Нужно прочитать картинку из файла и отобразить ее в Timage. Смещение картинки в файле относительно начала известно.
Как решить задачу?
Автор: Czechoslovak
Дата сообщения: 06.08.2010 08:56
Aladdinych
Через поток
Image.Picture.Bitmap.LoadFromStream();
или через клипбоард
Image.Picture.Bitmap.LoadFromClipboardFormat();
Автор: popugai
Дата сообщения: 06.08.2010 09:48
Кто может помочь решить задачи по Delphi? Например: Создание оболочки для автоматизации пакета методик»
1.    Создать папку (например С:/ППОРПЗ/ Группа/Фамилия/Proba)
Сохранить проект Proba.dpr ( Сохранить модуль, как Mainunit.pas)
2.    Работа с формой:
В инспекторе объектов найдите свойства и заполните:
Name----MainForm
Caption----- «Главная форма»
Размещаем элементы:
Button1: Caption—«Информация о разработчиках»
Button2: Caption—«Описание методик»
Button3: Caption—«Тестирование»
Button4: Caption—«Результаты исследования»
Bitbtn1----kind---bcclose; Caption -----«Выход»
MainMenu1- продублируйте названия пунктов меню-названия кнопок.

Это не все задание, только начало. Помимо этого есть еще.
Сам в Delphi не шарю.

P.S. безответственных личностей прошу не беспокоить!
Автор: JohnSilver182
Дата сообщения: 06.08.2010 12:44

Цитата:
У 7 Delphi (не знаю как в версиях постарше) это "нормально", когда слетают настройки контролов, свойства которых лежат на других формах\модулях


То есть решение проблемы в установке D 2007 (не все компоненты я смотрел перевели на более старшие версии)???

Ибо твориться что то странное . Я например когда ставлю на проблемной форме
Form1.tag=10 , то dxBarmanager меняет свой стиль и становиться голубым в Дизайн-Тайм (После перезагрузки проекта)
Автор: Aladdinych
Дата сообщения: 06.08.2010 13:37
Czechoslovak
Я пробовал проанализировать содержиное этого файла.
Получается, что он состоит из блоков, каждый из которых содержит:
1. Индекс изображения.
2. Длину тела изображения.
3. Собственно построчное тело изображения.
И более ничего.
Тело изображения такое же как, например в BMP файле начиная со смещения 1078.
Сам по себе блок данных не является BMP файлом.
я пробовал выделять это тело и отправлять в Timage след образом
image1.Picture.Bitmap.LoadFromStream(imgbuf)
но при выполнении этой строки генерируется ошибка: Bitmap image is not valid.
Информация о палитре как таковая в блоке отсутствует.
Но я знаю что изображение должно быть полутоновын в серых тонах.
Как победить проблему?
Автор: Frodo_Torbins
Дата сообщения: 06.08.2010 15:06
Aladdinych
Попробуйте image1.Picture.LoadFromStream(imgbuf) - так делфи попробует сама определить правильный формат.
Автор: Aladdinych
Дата сообщения: 06.08.2010 15:29
Frodo_Torbins
У объекта Picture нет метода LoadFromStream (Delphi 5)
Автор: Czechoslovak
Дата сообщения: 06.08.2010 15:41
Aladdinych
ну если у тебя там bmp файл то он должен соответствовать спецификации http://ru.wikipedia.org/wiki/BMP, по крайне мере первый две буквы должны быть BM

за то есть Picture.LoadFromClipboardFormat так что можешь через буфер попробывать
Автор: Sergey_Demchuk
Дата сообщения: 08.08.2010 11:08
Что можно сделать с
[Error] cache.dpr(4804): Too many local constants. Use shorter procedures

У меня написана процедура
procedure dependencies (payloadid: string; payloadidb: string; typeid: Integer);

И вызывать ее мне надо много раз, ибо она заносит значения в некоторую БД, где то раз 4000

dependencies('{2C8FBE83-2D3E-4CE6-A912-4BED85BCAC06}','{0D067D13-C3D7-4EA6-B346-740CD91FD547}',6);

и так с разными параметрами.
Как лучше поступить здесь?
Автор: Frodo_Torbins
Дата сообщения: 08.08.2010 11:42
Sergey_Demchuk
Тоесть ваш код выглядит приблизительно так:
Код: //...
dependencies('{2C8FBE83-2D3E-4CE6-A912-4BED85BCAC06}','{0D067D13-C3D7-4EA6-B346-740CD91FD547}',6);
dependencies('{1D8FEB91-67AE-44F5-B871-5BAD75BCFC82}','{4EA586BA-009B-4DC2-BAC8-CEFFF0C662A0}',5);
dependencies('{EC0741B0-5C31-4AAC-AAD2-B0087AE69A41}','{77B5E4B6-6B6F-44E7-BAD3-730E7FCFE26B}',7);
dependencies('{B7CE532A-8B0D-489C-BF32-BAD33E2C8152}','{C39FABE1-C778-4E77-AB79-EABCBBB74403}',3);
dependencies('{718E4394-86E1-4B34-8A80-40C488042D58}','{9FEAE608-DE4F-439E-9771-FF6C9358D020}',4);
//...
Автор: Sergey_Demchuk
Дата сообщения: 08.08.2010 12:19
Я так понял, что просто в коде слишком много литер, что за такое ограничение? Если я буду загонять все значения в массив, все равно код короче не будет.

Добавлено:
Frodo_Torbins
Именно так и выглядит
Автор: ShIvADeSt
Дата сообщения: 08.08.2010 14:35
Sergey_Demchuk

Цитата:
Я так понял, что просто в коде слишком много литер, что за такое ограничение? Если я буду загонять все значения в массив, все равно код короче не будет.

Вот что говорят на сайте Эмбаркадере

Цитата:

One or more of your procedures contain so many string constant expressions that they exceed the compiler's internal storage limit. This can occur in code that is automatically generated. To fix this, you can shorten your procedures or declare contant identifiers instead of using so many literals in the code.

мой совет - константы загнать в текстовый файл - инишку (чтобы не бить кучу констант в коде) примерно в таком виде
payloadid_1 = {2C8FBE83-2D3E-4CE6-A912-4BED85BCAC06}
payloadidb_1 = {0D067D13-C3D7-4EA6-B346-740CD91FD547}
в процедуре считывай примерно так
payloadid := Ini.ReadIni(Section, 'payloadid_'+IntToStr(i),'');
payloadidb := Ini.ReadIni(Section, 'payloadidb_'+IntToStr(i),'');
и уже вызывать
dependencies(payloadid,payloadidb,i);

инишку при желании заменить на типизированный (или обычный) файл и считывать в динамический массив. При этом читабельность кода улучшится, так как не будет 4000 строк с одним смыслом.
Вплоть до того, что если работа идет с базой данных,то все параметры загнать в таблицу со структурой
ID payloadid payloadidb TypeId
и при необходимости выбирать нужную запись по typeid.
Вариантов куча, выбирай любой.
Автор: YuriyRR
Дата сообщения: 08.08.2010 15:20
XL:= CreateOleObject('Excel.Application');
XL.Workbooks.Add('g:\!_BASES\ЗАПАДНАЯ\DATA\ООО Атол 29,07,2010.xls');
//не показывать предупреждающие сообщения
XL.DisplayAlerts := False;
//Открывать Excel на полный экран
XL.WindowState := xlMaximized;
XL.Visible := True;
Windows.SetParent(XL.HWND, Form1.PN.Handle); // Помещаю эксель на панель
Вопрос: Как при изменении размера основной формы делать так чтоб размер экселя автоматом вписывался в измененный размер панели типа Align = alClient
Автор: Sergey_Demchuk
Дата сообщения: 08.08.2010 19:08
ShIvADeSt
В текстовом файле у меня уже есть данные в таком виде
...
{92D58719-BBC1-4CC3-A08B-56C9E884CC2C},{D7BF3B76-EEF9-4868-9B2B-42ABF60B279A},1
{D92BBB52-82FF-42ED-8A3C-4E062F944AB7},{7FF0ACFE-4346-4D9D-B822-C69B99AAE1FC},1
{D1A19B02-817E-4296-A45B-07853FD74D57},{8AE28FB8-B8AE-4B58-A5FE-77F45E462BAE},1
{E4E188D2-27D5-4E4C-92CE-87F9D24AD2F6},{03169F19-B7D6-4569-AE75-5DD39854AACD},1
{E4E188D2-27D5-4E4C-92CE-87F9D24AD2F6},{0463F1EC-917C-4432-92F6-F424180889DF},1
...
Как бы то их лучше загнать в динамический массив?
Я пробую что то типа такого

var
f: TextFile; // файл
buf: String[80]; // буфер для чтения строк
myarr:array of string;
arr: Integer;
AssignFile(f, 'dependencies.txt');
Reset(f); // открыть для чтения
// чтение из файла
arr:=0;
while not EOF(f) do
begin
readln(f, buf); // прочитать строку из файла
myarr[arr]:=buf;
SetLength(myarr, 1);
arr:=arr+1;
ShowMessage(buf);
end;

CloseFile(f); // закрыть файл

Выдает ошибку в памяти по какому то адресу...
Автор: psa1974
Дата сообщения: 08.08.2010 20:33
Sergey_Demchuk
Позволю себе встрять
1. Почему SetLength(myarr, 1); стоит после myarr[arr]:=buf;? Просто объявление переменной типа динамический массив не распределяет память под его элементы, фактически такая переменная - указатель и сразу после объявления она равна nil. Получается, сперва делается попытка записать значение в еще нераспределенную память для элемента массива, а потом только делается выделение памяти под этот элемент... Надо бы наоборот.
2. Почему в вызове SetLength(myarr, 1); размер массива всегда равен 1? Почитай хелп по ф-ции... Правильно в данном случае SetLength(myarr, arr+1);
3. Но выделять память на каждом шаге цикла 4000 раз - не эффективно в плане быстродействия... Лучше выделять память блоками сразу скажем по 100 элементов (при необходимости, увеличивая еще на 100 и так далее)... После выхода из цикла сделать еще раз SetLength(myarr, arr); - этим отсекутся неиспользованные ранее выделенные элементы...

ЗЫ: если сложно с динамическим массивом, могу порекомендовать список TStringList...
Автор: Sergey_Demchuk
Дата сообщения: 09.08.2010 00:19
psa1974
Верно, сделал так

arr:=0; arrLength:=100; SetLength(myarr,100);
while not EOF(f) do
begin
readln(f, buf); // прочитать строку из файла
myarr[arr]:=buf;
if (arrLength-arr)<=1 then
begin
SetLength(myarr, arrLength+100);
arrLength:=arrLength+100;
end;
arr:=arr+1;
// ShowMessage(buf);
end;

CloseFile(f); // закрыть файл

Теперь работает.
Как бы теперь расчленить вот эту строку из масива
{92D58719-BBC1-4CC3-A08B-56C9E884CC2C},{D7BF3B76-EEF9-4868-9B2B-42ABF60B279A},1
на отдельные элементы
{92D58719-BBC1-4CC3-A08B-56C9E884CC2C}
{D7BF3B76-EEF9-4868-9B2B-42ABF60B279A}
1

Это, насколько я понимаю, придется еще три массива дополнительно создавать?
Автор: data man
Дата сообщения: 09.08.2010 01:24

Цитата:
Позволю себе встрять

И я тоже

Sergey_Demchuk

Цитата:
Это, насколько я понимаю, придется еще три массива дополнительно создавать?

Необязательно. Немного перепишите процедуру dependencies, передавайте в неё всю строку, а потом парсите:
Код: ...uses
..., StrUtils;
procedure dependencies (S: string);
var
l, r: integer;
payloadid: string;
payloadidb: string;
typeid: Integer;
begin
l := pos('{', S); r := posex('}', S, l);
payloadid := copy(s, l, r-l+1);

l := posex('{', S, r); r := posex('}', S, l);
payloadidb := copy(s, l, r-l+1);

l := posex(',', S, r);
typeid := StrToInt(copy(s, l+1, maxint));
...
Автор: ShIvADeSt
Дата сообщения: 09.08.2010 04:00
Sergey_Demchuk

Цитата:
Это, насколько я понимаю, придется еще три массива дополнительно создавать?

Можно сделать трехмерный массив типа
type
DepItem : array[1..3] of string;
a:array of DepItem;

тогда можно будет вызывать примерно так
a[1,1] - первый парам
a[1,2] - второй парам
a[1,3] - третий парам

с порядком индексов может напутал, но смысл думаю ясен.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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