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

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

Автор: volser
Дата сообщения: 20.10.2009 14:45
SIgor33
Какой это офис такое выдает?
У меня в 2003 такое

Код:
Range("A1:B2").Select
Selection.Copy
Range("D5").Select
ActiveSheet.Paste
Автор: Vladkyr
Дата сообщения: 20.10.2009 16:08
SIgor33
Посмотрите полный текст процедуры в предыдущем посте.
Если нужно работать с конкретной книжкой и конкретной страницей, тогда можно сделать так:

Код:
...
Workbook := ExcelObj.Workbooks.Add('Book.xls');
Workbook.Worksheets['SheetName'].Activate;
Worksheet := ExcelObj.ActiveSheet;
...
Автор: SIgor33
Дата сообщения: 21.10.2009 08:08
volser
Vladkyr
Спасибо за советы проблему решил так
Workbook.Sheets['Сводный'].Range[Workbook.Sheets['Сводный'].Cells[1, 20], Workbook.Sheets['Сводный'].Cells[2228, 23]].Copy(Workbook.Sheets['Сводный'].Range[Workbook.Sheets['Сводный'].Cells[1, 24], Workbook.Sheets['Сводный'].Cells[2228, 27]]);
Автор: mdid
Дата сообщения: 21.10.2009 10:00
вопрос такой..есть

Код:
GoodsHistory=record
hs,hs1 : GoodsHistory;
Автор: Vladkyr
Дата сообщения: 21.10.2009 10:28
mdid

Начиная с Delphi 2007 есть такая штука, как перегрузка операторов. Т.е. для класса или рекорда можно написать следующее:

Код:
type
TMyRec = record
class operator Equal(a: TMyRec ; b:TMyRec ) : Boolean;
class operator NotEqual(a: TMyRec ; TMyRec ) : Boolean;
end;

class operator TMyRec.Equal(TMyRec ; TMyRec ) : Boolean;
begin
// ...
end;


Автор: volser
Дата сообщения: 21.10.2009 10:28
mdid
Никак. Напишите метод и вызывайте его.
Автор: data man
Дата сообщения: 21.10.2009 10:33
mdid

Код:
uses
SysUtils;
...
if not CompareMem(@hs, @hs1, SizeOf(GoodsHistory)) then
...
Автор: mdid
Дата сообщения: 21.10.2009 10:54
пасиб...не знал про перегрузку
Автор: NOwlar
Дата сообщения: 21.10.2009 11:05
Vladkyr

К великому сожалению, как я недавно выяснил, перегрузка операторв для Delphi for Win32 работает только для рекордов...
Автор: Vladkyr
Дата сообщения: 21.10.2009 15:20
NOwlar

Согласен, но mdid привел пример именно с рекордами, поэтому это ему поможет.
Хотя с классами не работает
Автор: ppkp
Дата сообщения: 21.10.2009 15:51
Подскажите, как узнать число элементов записи (хорошо бы еще и их имена и типы) в runtime?

Код:
type
PMyRec = ^TMyRec;
TMyRec = packed record
Field1: boolean;
Field2: double;
Field3: string;
end;

var
MyRec: PMyRec;
Автор: pakusya
Дата сообщения: 21.10.2009 16:00
Спасибо за объяснение Vladkyr. Помогите пожалуйста еще, нужно создать приложение в котором есть:
Edit1(имя), Edit2(фамилия), Edit3(год рождения), Combobox1 с выпадающим списком(образование), RadioGroup1(пол(мужской, женский )). По нажатию кнопки "добавить" информация записывается в компонент Memo, расположенный в новой форме, в конец списка. По нажатию кнопки "очистить" поля ввода должны очистится.
Основную программу написала, а как всю эту информацию поместить в новую форму и очистить сразу все поля не могу сделать. Объясните пожалуйста.
Да и еще как можно предусмотреть невозможность ввода цифр ии символов в соответствующие поля Заранее спасибо.


Автор: Vladkyr
Дата сообщения: 21.10.2009 16:18
pakusya
На счет второго вопроса, то если Delphi версии меньше 2010, то нужно писать самому обработку нажатий клавиш с проверкой ввода или использовать сторонние компоненты (например, бесплатные Rx) в которых есть компоненты с проверкой ввода. В delphi 2010 сразу есть проверка ввода только на цифры. Ну или можно использовать компонент TMaskEdit, если он подойдет по логике задачи.
По первому вопросу не совсем понятно, что хочется. Очистить поля TEdit можно с помощью свойства Text (Edit1.Text := ''), а переписать значения полей в другую форму, также как и в прошлом ответе:

Код:
Form2.Memo1.Lines.Add(Edit1.Text);
Form2.Memo1.Lines.Add(Edit2.Text);
/// и так далее по всем полям. После очищаем
Edit1.Text := '';
Edit2.Text := '';
// ...
Автор: psa1974
Дата сообщения: 21.10.2009 17:11
pakusya

Цитата:
Да и еще как можно предусмотреть невозможность ввода цифр ии символов в соответствующие поля Заранее спасибо.

Пишете себе такой обработчик события OnKeyPress у компонента Edit1:

Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['0'..'9'] then
Key:= #0; //это строка запрещает ввод символа
end;
Автор: pakusya
Дата сообщения: 22.10.2009 04:24
огромное спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Автор: SerBUser
Дата сообщения: 22.10.2009 07:34
Delphi и Active Directory. Такой вопрос - как узнать - принадлежит ли пользователь указанной группе. Пример - пользователь Vasya в домене Domen1 принадлежит глобальной группе DG Internet Company. В домене Domen2 есть локальная группа DL InternetUsers, в которую входит группа DG Internet Company из домена Domen1. Как определить, принадлежит ли пользователь Domen1\Vasya группе DL InternetUsers в домене Domen2?
Автор: Frodo_Torbins
Дата сообщения: 22.10.2009 16:52
ppkp
RTTI для рекордов генерируется только если они содержат некий объект с управляемым временем жизни. Например строку или интерфейс. То есть вам надо сделать приблизительно так: http://alex.ciobanu.org/?p=55 Ну или можно использовать Delphi2010 там очень большие улучшения в плане RTTI.
Автор: ppkp
Дата сообщения: 23.10.2009 14:03
Frodo_Torbins
Спасибо, хоть что-то подобное. Но даже если я захвалил запись как класс и элементы его как property , не достать мне до них, пока не зарегистрировал их через RegisterPropertyEditor. А для этого нужно ставить published. А тогда компилятор ругается. Такой замкнутый круг.
Автор: Frodo_Torbins
Дата сообщения: 23.10.2009 19:14
ppkp
Думаю что в делфи до D2010 с рекордом такое провернуть просто не возможно.
Автор: ppkp
Дата сообщения: 23.10.2009 23:40
Можно, конечно, вместо рекорда написать класс - только он должен быть наследником как минимум TComponent. А у меня рекорд - ну максимум от TList
Автор: psa1974
Дата сообщения: 24.10.2009 03:21
ppkp

Цитата:
...только он должен быть наследником как минимум TComponent

Не обязательно! Достаточно обрамить объявление класса диррективами {$M+}... {$M-} и для такого класса будет генерироваться RTTI-информация в любой Дельфи. Само собой только для опубликованных свойств. Пример:

Код:
type
{$M+}
TMyClass = class(TObject)
private
fField1: boolean;
fField2: double;
fField3: string;
published
property Field1: boolean read fField1 write fField1;
property Field2: double read fField2 write fField2;
property Field3: string read fField3 write fField3;
end;
{$M-}
Автор: ppkp
Дата сообщения: 24.10.2009 11:48
psa1974
Спасибо, знал про эти директивы - а тут вышибло. Сейчас попробую. Спасибо.
Автор: GrHnd
Дата сообщения: 26.10.2009 10:28
Подскажите как узнать имя и домен пользователя текущего процесса?
Автор: data man
Дата сообщения: 26.10.2009 10:45
GrHnd
Например, взять здесь http://gp.17slon.com/gp/dsiwin32.htm DSiWin32.pas
Помимо кучи полезного, там есть функция DSiGetProcessOwnerInfo.
Автор: psa1974
Дата сообщения: 26.10.2009 11:10
GrHnd

Цитата:
Подскажите как узнать имя и домен пользователя текущего процесса?

Смотри за # (приведен пример заполнения листбокса инфориацией о имени и домене пользователя для каждого активного процесса в системе в момент вызова)
Автор: Maks150988
Дата сообщения: 26.10.2009 17:35
Привествую. Подкиньте плиз кто-нибудь pas файлы из 2009 или 2010 версий, желательно модули с прототипами функций Windows (обычно в директории Win лежит это добро). Также особо интересует IP Helper модуль. Он там есть или опять использовать JEDI версию которая не обновлялась толком?
Автор: psa1974
Дата сообщения: 26.10.2009 19:16
Maks150988
Держи папку win из Дельфи 2010, разбирайся:
Ссылка
Автор: Maks150988
Дата сообщения: 26.10.2009 19:51
psa1974
А можно на народ диск или другой файлообменник? А то там просят премиум аккаунт для закачки файла.

This file can only be downloaded by becoming a Premium member

There are no more download slots available for free users right now. If you don't want to become a premium member, you might want to try again later.
Автор: psa1974
Дата сообщения: 26.10.2009 20:22
Maks150988
Так бы сразу и сказал . Лови (от Дельфи 2010, повтор):
ifolder.ru
narod.ru
Единственное что - не понятно что имелось ввиду под
Цитата:
IP Helper модуль
...
Автор: Maks150988
Дата сообщения: 26.10.2009 21:56
psa1974
Да, спасибо. IP Helper это для использования iphlpapi.dll. В версии JEDI нет некоторых новых функций, да он вообще походу не обновлялся.

Еще что хотел узнать. Если есть кто-нибудь из тех кто освоил функцию DeCompressBuf, дайте знать, а то есть вопрос. Не знаю где уже искать, попадается одна и та же ерунда про поток и стримадаптеры эти. Мне нужно декодировать строку, пожатую из gzip в string обычный. Получаю строку с сервера, естественно там ответ закодирован, вот и надо все это дело раскодировать.


Код: procedure DeCompressGzipString(const InpStr: AnsiString; var OutStr: AnsiString);
var
InpBuf : Pointer;
InpSize: Integer;
OutBuf : Pointer;
OutSize: Integer;
begin
InpBuf := nil;
OutBuf := nil;
InpSize := lstrlen(@InpStr[1]);
if (InpSize > 0) then
try
GetMem(InpBuf, InpSize);
lstrcpy(InpBuf, @InpStr[1]);
DeCompressBuf(@InpBuf, InpSize, 0, OutBuf, OutSize);
OutStr := PAnsiChar(OutBuf);
finally
if (InpBuf <> nil) then
FreeMem(InpBuf);
if (OutBuf <> nil) then
FreeMem(OutBuf);
end;
end;

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


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