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

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

Автор: RSoFT1978
Дата сообщения: 23.11.2008 19:42
DmitryKz
Трудно сказать что-то определённое, не видя кода. Надо смотреть, чем именно этот Edit отличается от остальных. Попробуй поместить код в OnCreate формы настроек или вызывать, напр., Delay(10) перед (или после) заполнения каждого Editа.
Ps. Скорее всего, это связано с оптимизацией кода компилятором и использованием в программе потоков.
Автор: ShIvADeSt
Дата сообщения: 24.11.2008 01:12
DmitryKz
Каким образом создаешь формы? Динамически (при обращении) или статически (раз создал и все)? В любом случае, у тебя где то переопределяется это значение. Внимательно изучи весь код на предмет изменения свойств Едита. Судя по всему кстати у тебя статически создаются окна - это очень плохо, так как при большом количестве окон программа будет кушать больше памяти чем необходимо. Убери из свойств проекта все вызовы форм, кроме главной и создавай формы в тот момент. когда это необходимо (при нужных событиях) - это позволит тебе нормально отслеживать свойства форм и уменьшит потребляемую память в разы - у меня был проект с большой базой данных, там в дочерних формах грузились нехилые объемы данных. В результате прога хапала под 100 метров рамы и долго грузилась, так как в контролы загружались записи. Сделал динамическое создание - меньше 10 метров в памяти, все грузится быстро.
Автор: diodio
Дата сообщения: 25.11.2008 11:24
Друзья! Подскажите, пожалуйста.
Есть текстовый файл и таблица, в которой нужно заменить данные в одном столбце данными из текстового файла.
Поиск по тхт я организовал, там все просто.

Формат бд - старый dbase III, .dbf

Cуть в том, что в таблице более 500 000 записей, работает все оч. медленно (одна запись=1 сек).

Подскажите, пожалуйста, как организовать быструю замену?

Пробовал так


Код: If Table1.Active = false then Table1.Active := true;
Table1.First;
Application.ProcessMessages;
if Table1.Locate('FIO;KOD_DN',VarArrayOf([fio,684]),[loCaseInsensitive]) then
begin
inc(z);
JvLabel4.Caption := IntToStr(z);
Table1.Edit;
Table1.fieldbyname('FIO').AsString := lichb;
Table1.Post;
end;



If Table1.Active = true then Table1.Active := false;
Автор: Kr_Alex
Дата сообщения: 25.11.2008 11:27
Раньше был простой веб-сервис, создавал proxy class и вызывал методы сервиса без особых проблем, то же самое через https не работает, выдается сообщение a certificate is required to complete authentication. Что с этим делать?
Автор: ShIvADeSt
Дата сообщения: 25.11.2008 13:56
diodio
Проверь не привязан ли грид к таблице, если привязан - то вот самый главный тормоз. Далее - есть ли индексы у таблицы?
Попробуй содержимое файла кинуть в другую таблицу и выполнить запрос примерно такой
UPDATE P100 set p100.FIO=(select lichb from TempTable where p100.FIO=TempTable.FIO) where p100.KOD_DN=684
Автор: qBarmaleyq
Дата сообщения: 25.11.2008 14:14
diodio
Как у же выше посоветовали если у тебя подключен Grid какой либо, то это будет дольше работать чем без него.
Попробуй перекинуть DBF файл в любую другую СУБД и там уже всё это сделать. Можно и не в СУБД, например ACCESS. А затем обратно сохранишь. Если тебе только всё это не нужно делать постоянно.


Автор: vav79
Дата сообщения: 26.11.2008 18:24
помогите плиз.....
все здесь... http://forum.ru-board.com/topic.cgi?forum=33&topic=9944#1
вознагр. гарантирую. в разумных пределах
Автор: Maks150988
Дата сообщения: 26.11.2008 18:42
Такой вопрос. необходимо сохранять файл на диск посредством CreateFile. Впринципе меня устраивает эта функция вместо всяких AssignFile, Rewrite и т.д. Тем более вроде не надо париться и обрабатывать дурацкие исключения вслучае когда например директория не существует или сам диск куда сохраняем файл. Тут сразу нет и нет и программа не вываливается с ошибками. Но, вопрос вот в чем. При тестировании программы выяснилось что если например указать сохранить файл в привод, то в Windows XP включается этот бестолковый Мастер записи комапктов и предлагает записать этот отложенный файл. Создаю так CreateFileW(PWideChar(szFilePath), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0). Искал в справке, не нашел параметров октлючающих такую фичу. И надо понимать что такая функция очень опасна, если например вместо файла указали саму букву диска и тут же производится запись данных?
Автор: fcdobpiy
Дата сообщения: 26.11.2008 19:06
Maks150988
ты можешь отключить фичу записи дисков в самой винде. а с включенной - это нормальная реакция. что ты ожидал увидеть при попытке сохранить на сд(или двд)?
Автор: Maks150988
Дата сообщения: 26.11.2008 19:50
fcdobpiy
Ну системный Мастер записи компактов только запарывает диски - убедился на личном опыте. А ожидал увидеть только сообщение об ошибке создания файла на диске. И кстати просто проверял на DVD. Да и тем более толку что я отключу, все равно у других может он включен и они не догадываются...
Автор: ShIvADeSt
Дата сообщения: 27.11.2008 01:38
Maks150988
Проверяй является ли диск сдром устройством и в случае если да, то просто не делай CreateFile.
Автор: shadow user777
Дата сообщения: 27.11.2008 19:47
Имеется программка. Написана на Дэльфях.
В программе несколько различных вкладок.
На вкладках компоненты "TStringGrid".
Сырков естественно нет
Проблема в том что при разворачивании окна программы на весь экран, компонент "TStringGrid" остается прежнего размера, что не совсем удобно.
Можно ли какими либо редакторами ресурсов выставить этому компоненту свойства что бы при разворачивании формы программы "TStringGrid" тоже подгонял свой размер к окну программы.
Да, и еще, кто посоветует программу для ВИЗУАЛЬНОГО редактирования форм дэльфи программ.
Заранее спасибо за ответы.
Автор: ShIvADeSt
Дата сообщения: 28.11.2008 01:41
shadow user777
Найди StringGrid в ресурсах и выстави ему свойство Align в состояние Client (Top, Bottom). Смотри по тому, как он располагается. Визуальное редактирование - сохраняешь из ресурса форму как файл dfm открываешь в дельфи, редактируешь, потом опять сохраняешь и суешь обратно в ресурс, или декомпилируешь проект, чтобы получить набор юнитов и форм, редактируешь, а потом суешь в ресурсы в виде текста. Правда хз, получится или нет. Лучше конечно сорсы иметь
Автор: delover
Дата сообщения: 28.11.2008 07:07
DmitryKz
Я помнится, как-то обещал воспользоваться айдишниками из базы. Так как был вопрос о преобразовании Integer(Pointer(Integer))).


Для начала описание листа тупо слизано с Classes и только заменены Pointer на Integer.
[more={ TIntegerList class }]

Код: [no]
TIntegerList = class(TList)
private
FCurrentIndex: Integer;
protected
function GetItem(Index: Integer): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
procedure SetItem(Index: Integer; Item: Integer); {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
public
function Add(Item: Integer): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function AddItems(Items: TList): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function AppendTo(Items: TList): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function Extract(Item: Integer): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function Remove(Item: Integer): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function IndexOf(Item: Integer): Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
procedure Insert(Index: Integer; Item: Integer); {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function First: Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
function Last: Integer; {$IFDEF SUPPORTS_INLINE}inline;{$ENDIF}
property Items[Index: Integer]: Integer read GetItem write SetItem; default;
function ToString(const ADefault: string = ''; const ADelimiter: string = ','): string;
end;
[/no]
Автор: DmitryKz
Дата сообщения: 28.11.2008 21:04
Ребята, посоветуйте, где можно найти алгоритм поиска в юникодном тексте с возможностью включения опций "Слово целиком" и "С учетом регистра"?
Автор: asdnsd
Дата сообщения: 28.11.2008 21:21
Привет всем, возникла следующая проблема: необходимо каким то образом определить номер телефона с которого звонят на стационарный телефон, (с мобильными телефонами работал когда то, было все через AT команды), а как быть со стационарным, каким боком его подключать к компьютеру и работать с ним?
Автор: AlexIntegral
Дата сообщения: 28.11.2008 23:27
Здравствуйте, возник такой вопрос, при создании консольного приложения процедура Write (Writeln) выводит корректно лишь английские буквы, а как заставить её выводить русские буквы, что-то...вроде:

Код: Uses Windows;
Var Str: array[0..255] of char;
Автор: NOwlar
Дата сообщения: 28.11.2008 23:45
AlexIntegral
Дело в том, что коносль отображает руские символы в другой кодировке (DOS aka CP866), а код приложение редактируется в кодировке Win1251, поэтому и выводятся символы не коректно.
Как варианты:
1. Определить весь текст, который нужно выводить через строковые константы в отдельном модуле, и отредактировать его в редакторе, который может сохранять в DOS кодировке.
2. Написать функцию перекодировки из CP1251 в CP866 и использовать её до вывода текста. Исходный код такой функции, наверняка, можно где-нибудь найти.
Автор: RSoFT1978
Дата сообщения: 29.11.2008 00:35
AlexIntegral
Можно сделать, напр., так:

uses Windows;
Var Str1,Str2: String;
begin
str1:='Превед медвед';
str2:=' ';
CharToOem(PChar(Str1),PChar(Str2));
write(str2);
end.
Автор: Yozj
Дата сообщения: 29.11.2008 10:56
AlexIntegral
Да, RSoFT1978 предложил неплохой вариант, только можно облагородить:


Код:
function convertToOem(str: String): String;
var
res: String;
begin
setLength(res, length(str));
CharToOem(PChar(str), PChar(res));
Result := res;
end;
Автор: Melnik Yuri
Дата сообщения: 29.11.2008 11:19
asdnsd


Цитата:
Привет всем, возникла следующая проблема: необходимо каким то образом определить номер телефона с которого звонят на стационарный телефон, (с мобильными телефонами работал когда то, было все через AT команды), а как быть со стационарным, каким боком его подключать к компьютеру и работать с ним?


Я так думаю, что надо воспользоваться внутренним или внешним модемом с поддержкой CallerID или российского АОНа (в зависимости от используемой телефонной сети).
Плюс к этому воспользоваться компонентом или библиотекой компонент по работе с COM-портами для Delphi и с помощью AT-команд запрашивать номер телефона с которого звонят. AT-команды надо искать в документации от используемого модема ...
Автор: Yozj
Дата сообщения: 29.11.2008 11:29
asdnsd
отечестенная Палиха отлично заточена для решения таких задач, у нее есть прямой интерфейс для связи с компьютером.
Автор: asdnsd
Дата сообщения: 29.11.2008 13:53
Спасибо за ответы, очень помогли
Автор: shadow user777
Дата сообщения: 29.11.2008 19:44
Требуется помощь.
Имеется исходник маленькой прожки на Дэльфях.
Но так как я не программер, собрать из исходника все в нормальный дэльфи-проект не получается.
Вот тут сорцы http://seeitworks.com/index.php?dir=Launchers/Launcher%2BMinimizer%5Bsource%20by%20nosboRBR%5D/ архив Laucker S3.rar
Если кто то соберет все это в дэльфи-проект пригодный для дальнейшей компиляции и внесения некоторых изменений и выложит - буду признателен.
Автор: Melnik Yuri
Дата сообщения: 29.11.2008 20:09
shadow user777


Цитата:
Вот тут сорцы http://seeitworks.com/index.php?dir=Launchers/Launcher%2BMinimizer%5Bsource%20by%20nosboRBR%5D/ архив Laucker S3.rar


Скачал архив Laucker S3.rar - там сорцы не на Delphi а на C++Builder !
Так что здесь требуется помощь от специалиста со знанием C++Builder ...
Автор: Yozj
Дата сообщения: 30.11.2008 11:54
shadow user777
Как сказал Melnik Yuri там исходники на Си++.
Все равно тебе с этим проектом работать дальше самостоятельно, так что ставь С++ Builder и открывай "Laucker.bpr", там никаких проблем быть не должно.
Автор: shadow user777
Дата сообщения: 30.11.2008 21:37
Ммммм тогда впорос, можно ли как то переделать ЭТО под Дэльфи?
Автор: Maks150988
Дата сообщения: 30.11.2008 22:25
Здраствуйте. Есть вопрос - вот надо сделать так чтобы на кнопку накладывались изображения взависимости от состояния нажатости. Обычный и ховер эффект сделал через трекмаусевент, но возникло затруднение отображения картинки на кнопке, когда та нажата. Не придумывается все никак проверка. Пытался через овнердрав, не всегда нажатость отрабатывала да и ну его нафиг овнердрав - мороки много. Пока ловлю события от мыши через сабклассинг кнопки. Решил еще одну переменную ставить чтоб сверяться, только в мауслив и маусмув не придумывается способ возрата значения для этой переменной - ведь кнопка может и нажата была, но курсор убрали с нее, как в этом случае.

http://webdrive.avtograd.ru/Download/Explorer/temp/hbutton.zip

Вот, собственно, пример того что получилось сделать.
Автор: yegorovpavel
Дата сообщения: 30.11.2008 22:41
Вроде проблема и пустячная, но решить никак не могу. Гуголь что-то никак не поможет.
Имеется Chart. При щелчке по любой точке координатной сетки в showmessage должны выдаваться координаты точки, в которую мы щелкнули.
Как получить эти самые координаты, никак не могу понять. В событии OnClickBackground передаются координаты относительно верхнего левого угла всего чарта, а получить-то требуется координаты относительно начала координат чарта.
Буду благодарен за советы.
Автор: ShIvADeSt
Дата сообщения: 01.12.2008 01:06
Maks150988
В связи с тем, что все равно сабклассишь как и я свои кнопки в подобных приложениях вот код (взято из открытого проекта - там красивое определение каптурения кнопки). Но юзаю OwnerDraw стиль кнопки.

Код:
function ButtonProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
point :TPoint;
Rect :TRect;
begin
case Msg of
WM_MOUSEMOVE:
begin
GetCursorPos(point);
GetWindowRect(hwnd, rect);
if PtInRect(rect, point) then begin
if GetCapture <> hWnd then begin
SetCapture(hWnd);
MouseOver:=OverOK;
InvalidateRect(hWnd,nil,FALSE);
end;
end else begin
ReleaseCapture;
MouseOver:=NotOver;
InvalidateRect(hWnd,nil,FALSE);
end;
end;
end;
result := CallWindowProc(pointer(OldBtnProc), hWnd, Msg, wParam, lParam);
end;


procedure OnDrawItem(const DStr:PDRAWITEMSTRUCT);
var
DC :HDC;
Rect :TRect;
BtnText Char;
Focused :boolean;
holdFont,HTFont :HFONT;
Color :TCOLORREF;
begin
case DStr.CtlType of
ODT_BUTTON:
begin
DC:=DStr.hDC;
Rect:=DStr.rcItem;
case DStr.CtlID of
BTN_OK: begin
BtnText:=PChar(GetProp(DStr.hWndItem,'Caption'));
if (DStr.itemState and ODS_FOCUS)<>0 then Focused:=True else Focused:=False;
if (DStr.itemState and ODS_SELECTED)<>0 then
DrawButtonDown(DC,Rect.Left,Rect.Top,Rect.Right-Rect.Left,Rect.Bottom-Rect.Top,Focused,BtnText)
else DrawButton(DC,Rect.Left,Rect.Top,Rect.Right-Rect.Left,Rect.Bottom-Rect.Top,Focused,BtnText);
if (MouseOver=OverOK) and NOT ((DStr.itemState and ODS_SELECTED)<>0) then
DrawButtonUp(DC,Rect.Left,Rect.Top,Rect.Right-Rect.Left,Rect.Bottom-Rect.Top,Focused,BtnText);
end;
end;
end;
end;
end;


WM_DRAWITEM: OnDrawItem(PDRAWITEMSTRUCT(lParam));

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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