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

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

Автор: XPerformer
Дата сообщения: 09.10.2013 14:58
alsterkh
дело хозяйское, но я тоже сталкивался с тем, что он не всегда срабатывает
Автор: Man_Without_Face
Дата сообщения: 22.10.2013 17:58
Удалено
Автор: Grande
Дата сообщения: 27.10.2013 17:35
Уважаемые Мастера, посоветуйте.
Имеется код:

Код: procedure TfrmFrame.WaitStr(Zhopa: AnsiString; Count: Integer);
var
LenOfBuf: Cardinal;
S, Local: AnsiString;
begin
Local := '';
repeat
ioctlsocket(sktFrame, FIONREAD, LenOfBuf);
SetLength(S, LenOfBuf);
Recv(sktFrame, PChar(S)^, LenOfBuf, 0);
Local := Local + S;
SetLength(S, 0);
until Pos(Zhopa, Local) <> 0;
WorkLocal := Local;
end;
Автор: Frodo_Torbins
Дата сообщения: 27.10.2013 18:27
Grande
По документации последний параметр ioctlsocket - указатель.
Плюс сокет совершенно не обязан делить сообщения так же, как они были отправлены. Поэтому в конце текущего сообщения вполне может быть кусочек следующего. Правильная нарезка - это уже ваша задача.
Автор: Grande
Дата сообщения: 27.10.2013 18:37
Frodo_Torbins
Гм... Это все понятно... Но, тем не менее, спасибо Это у меня нечто вроде размышлений вслух
Очень помогает найти правильный путь
Автор: Frodo_Torbins
Дата сообщения: 27.10.2013 23:52
Плюс там бы еще PAnsiChar не помешал вместо PChar.
Автор: Grande
Дата сообщения: 29.10.2013 15:35
Frodo_Torbins
Да, верно, спасибо большое.
Автор: KolduNec
Дата сообщения: 29.10.2013 20:35
есть написанная прога на Делфи, которая ведет подсчеты возможных путей с различным шагом. столкнулись с 2мя проблемами,

1. очччень долго считает некоторые вариации, (бывает работет без перерыва до 2.5 месяцев)
2. нет возможности сохранить результат(при долгих подсчетах), затем продолжить подсчеты с сохраненного места.
3. есть еще 3я, но не столь страшная,как первые 2е: грузит до 51% ЦП

Пожалуйста нужна помощь с первыми 2мя проблемами.


ЗЫ как сюда закинуть архив с прогой, не разобрался. потому мой маил koldune@mail.ru либо в контакте http://vk.com/koldunec

Кому интересно заняться и помочь, есть вопросы, можете задавать и тут. переодически буду проверять
http://forum.ru-board.com/topic.cgi?forum=33&topic=13862#1
Спасибо.
Автор: Grande
Дата сообщения: 31.10.2013 09:58
KolduNec

Цитата:
как сюда закинуть архив с прогой, не разобрался

Есть общепринятая практика заливать файлы на файлообменники (например, rghost.ru), а здесь выкладывать ссылку на этот файлообменник.
Автор: YuraseK
Дата сообщения: 31.10.2013 11:13
Загадка, что вернут функции:
d:= DaysBetween(StartOfTheDay(Now), EndOfTheDay(Now));
m:= MonthsBetween(StartOfTheMonth(Now), EndOfTheMonth(Now));
y:= YearsBetween(StartOfTheYear(Now), EndOfTheYear(Now));
Чур, не компилировать, не смотреть реализацию функции, а сходу посчитать в уме.
Автор: A_V
Дата сообщения: 01.11.2013 13:10
YuraseK
зависит от того, в какой момент времени их вызывать (MonthBetween, YearsBetween)
Автор: Ichigo2
Дата сообщения: 13.11.2013 17:47
Привет всем.
Можно ли как-то сохранить строку из таблицы, StringGrid.Rows[1] скажем, в StringList, а затем обратно?

Мне просто надо сохранять состояние таблицы со всеми значениями, а потом восстанавливать.
Автор: A_V
Дата сообщения: 13.11.2013 20:54
StringGrid.Rows[x] - это и так TStrings, так что rtfm StringGrid.Rows[x].SaveToFile/SaveToStream
Автор: Ichigo2
Дата сообщения: 18.11.2013 16:39
А подскажите название той настройки, что бы по cntrl+space сразу вставлялся шаблон для прототипа, а не пустые скобки. Не могу нагуглить её
Автор: Ichigo2
Дата сообщения: 19.11.2013 13:40
Все, нашел.
http://www.decoding.dax.ru/notes/tools/tools.html
Автор: Ichigo2
Дата сообщения: 04.12.2013 15:11
Вот блин.
Начинал проект в BDS 2006, хочу переехать на Delphi 7. Открываю проект - а там у TRichEdit нет метода OnClick. Как теперь?
Автор: exteris
Дата сообщения: 05.12.2013 07:24
Ichigo2
OnMouseDown
Автор: Dauren111
Дата сообщения: 05.12.2013 13:04
Привет всем! Встала такая задача... нужно сделать Master-Detail (в качестве доступа к БД используется ODAC)... но только вот в подчиненом наборе количество колонок меняется от записи к записи в главном... ну т.е. надо формировать запрос на лету... стандартными средствами пока не понимаю как это сделать...мож кто просветит... заранее спс!
Автор: volser
Дата сообщения: 05.12.2013 14:34
Dauren111
На AfterScroll мастера нужно сформировать скл детали и переоткрыть деталь.
Автор: Dauren111
Дата сообщения: 05.12.2013 20:38

Цитата:
На AfterScroll мастера нужно сформировать скл детали и переоткрыть деталь.

неа это не то
Автор: exteris
Дата сообщения: 06.12.2013 07:50

Цитата:
неа это не то

Почему?
Автор: wSDAw
Дата сообщения: 09.12.2013 10:02
Привет всем... не подскажете приличный генератор отчетов под dephi 5 для создания штрих-кодов GS1-EAN128 ?!
Автор: ant0ni02004
Дата сообщения: 10.12.2013 16:25
wSDAw
в FastReport есть в т.ч. и баркоды
Автор: wSDAw
Дата сообщения: 11.12.2013 04:02
ant0ni02004
Спасибо... в соответствующей ветке не получилось его раздобыть, сейчас купил, жду когда придет лицензия по почте, благо стоит копейки.
Автор: log1stable
Дата сообщения: 12.12.2013 02:59
В общем, пытаюсь сделать свое дерево файлов на label'ах. Смог пока что сделать следующее: найти диски (на которые возможна установка, привязать процедуры наведения, снятия, клика(по которому создается дерево подпапок данной папки)). Нужно сделать так, чтобы в случае, когда уже раскрыта папка, при раскрытии папки этого же уровня удалялись подпапки предыдущей (на изображении более понятно выражено). У меня уже мозг кипит, я не знаю, как именно РЕАЛИЗОВАТЬ это. Авось, у кого-нибудь из вас получится.
[more=Код]var CurrentFile, CurrentDisc, Path: string;
Number, NumberDir, Discs, FirstTop, FirstLeft: Integer;
FindRec: TFindRec;
CreatedLabels: string;

type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

const
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

Функция определения типа диска:
function GetDriveType(nDrive: string): Longint; external 'GetDriveTypeW@kernel32.dll stdcall';
procedure TreeLabelEnter(Sender: TObject); forward;
procedure TreeLabelLeave(Sender: TObject); forward;
procedure TreeLabelClick(Sender: TObject); forward;

procedure ShowMessage(Name: String);
begin
MsgBox(Name,MbInformation,MB_OK);
end;

function GetDiscs(): TStringList;
var
i: integer;
buk: array[0..26] of char;
begin
for i:=1 to 26 do
begin
buk[i] := Chr(i+64)
if (GetDriveType(PChar(buk[i]+':\')) <> 1) and not (GetDriveType(PChar(buk[i]+':\')) = 5) then
begin
with TLabel.Create(WizardForm) do
begin
Parent:=WizardForm;
AutoSize:=True;
Top:=FirstTop+Number*Height+4;
Left:=FirstLeft;
Caption:=buk[i]+':\';
Cursor:=crHand;
Hint:=Caption; //Например "D:\"
OnMouseEnter:=@TreeLabelEnter;
OnMouseLeave:=@TreeLabelLeave;
OnClick:=@TreeLabelClick;
Discs:=Discs+1;
end;
Number:=Number+1;
end;
end;
end;

procedure TreeLabelEnter(Sender: TObject);
begin
if Sender is TLabel then
begin
TLabel(Sender).Font.Style:=[fsBold];
end;
end;

procedure TreeLabelLeave(Sender: TObject);
begin
if Sender is TLabel then
begin
TLabel(Sender).Font.Style:=[];
end;
end;

var MyTop: integer;

procedure DeleteTreeLabels(Sender: TObject);
var i: integer;
begin

end;

procedure TreeLabelClick(Sender: TObject);
var
i, j: integer;
begin
for i:=1 to Length(TLabel(Sender).Hint) do
begin
if TLabel(Sender).Hint[i]='\' then j:=j+1;
end;
WizardForm.Caption:=Путь установки: '+TLabel(Sender).Hint;
WizardForm.DirEdit.Text:=TLabel(Sender).Hint;
if FindFirst(TLabel(Sender).Hint+'\*', FindRec) then begin
try
repeat
if (FindRec.Attributes) and (FILE_ATTRIBUTE_DIRECTORY) <> 0 then
if (FindRec.Name<>'.') and (FindRec.Name<>'..') and (FindRec.Name<>'$Recycle.Bin')
and (FindRec.Name<>'Boot') and (FindRec.Name<>'Recovery') and (FindRec.Name<>'ProgramData')
and (FindRec.Name<>'System Volume Information') and (FindRec.Name<>'$RECYCLE.BIN')
and (FindRec.Name<>'msdownld.tmp') then
begin
Number:=Number+1;
with TLabel.Create(WizardForm) do
begin
AutoSize:=True;
Parent:=WizardForm;
Left:=j*10;
Top:=Number*Height+4;
Caption:=FindRec.Name;
Cursor:=crHand;
Name:='Label_'+IntToStr(Number);
CreatedLabels:=CreatedLabels+','+Name;
Tag:=Number;
Hint:=TLabel(Sender).Hint+Caption+'\'; Например "Диск\Родительска папка\Эта подпапка" "(D:\1\2)"
OnMouseEnter:=@TreeLabelEnter;
OnMouseLeave:=@TreeLabelLeave;
OnClick:=@TreeLabelClick;
end;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;

На создании формы:
begin
FirstTop:=10;
FirstLeft:=10;
GetDiscs;
end;[/more]
Автор: ulyss1977
Дата сообщения: 12.12.2013 04:22
log1stable

Цитата:
на изображении более понятно выражено

Изображения не видно, к сожалению
Автор: log1stable
Дата сообщения: 12.12.2013 04:56
ulyss1977,
Автор: Kmich
Дата сообщения: 12.12.2013 07:44
log1stable
Вам необходимо удалить label текущего уровня у которых left =j*10 а процедурке TreeLabelClick
типа так:

begin
for i:=1 to Length(TLabel(Sender).Hint) do
begin
if TLabel(Sender).Hint[i]='\' then j:=j+1;
end;

CountDestroy:=0;
for I := 0 to WizardForm.ComponentCount - 1 do
if (WizardForm.Components[I] as TLabel).Left=j*10 then
begin
(WizardForm.Components[I] as TLabel).Destroy;
Inc(CountDestroy);
end;
Numbers:=Number-CountDestroy;
а дальше ваш код процедуры TreeLabelClick.

А почему используете Label, а не например TreeView.
Автор: exteris
Дата сообщения: 12.12.2013 09:30

Цитата:
В общем, пытаюсь сделать свое дерево файлов на label'ах.

Зачем на лейблах!?
Автор: Alexzzy
Дата сообщения: 12.12.2013 10:35
Тоже интересно зачем. А так, лучше для каждого уровня помещать лэйблы в контейнер (TPanel, например)...

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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