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

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

Автор: Frodo_Torbins
Дата сообщения: 12.10.2008 22:43
DmitryKz
Ну да. Вроде бы должно сработать.
Автор: iddqd2
Дата сообщения: 13.10.2008 17:46
DmitryKz
Да, так работает. Проверено.
Автор: Maks150988
Дата сообщения: 14.10.2008 19:28
Здраствуйте. Нужна помощь в прояснении ситуации. Значит создаю вкладки через проперти шит и в программе есть поддержка многоязычности. так вот нужно чтоб при нажатии на кнопку менялись строки в заголовке вкладок этого проперти шит. Я так посмотрел в пдф книжонке и поисковиках, что нужно PropSheet_SetTitle использовать или PSM_SETTITLE с флагами. Ну флаг нашел PSH_PROPTITLE.
Использовал как SendMessage(hSetTab1, PSM_SETTITLE, PSH_PROPTITLE, Integer(PAnsiChar('MyText'))) и текст не поменялся.
Я вот все думаю может из-за того что создаю вкладки без нужных флагов? А то при иницализации страниц только так к примеру:

Код:
PropPage.dwSize := SizeOf(PropPage);
PropPage.dwFlags := PSP_USETITLE;
PropPage.hInstance := hInstance;
PropPage.pszTemplate := MAKEINTRESOURCE(RC_DIALOG_TABGENERAL);
PropPage.pfnDlgProc := @GeneralSettingsFunction;
szIniStr := GetIniString(szLngPath + szSymbolSplash + szLngFile, szStringsFile, 'ID_DLGPAGE_GENERAL', '');
PropPage.pszTitle := PAnsiChar(szIniStr);
APropPage[0] := CreatePropertySheetPage(PropPage);

Автор: DmitryKz
Дата сообщения: 15.10.2008 00:17
Удалено.
Автор: Aladdinych
Дата сообщения: 15.10.2008 16:15
Dimoniusis
Sorry
FindWindowEx - такую функцию нашел
а EnumWindowsEx - что-то не могу нати...
Автор: Kotopes
Дата сообщения: 15.10.2008 22:08

Цитата:
Dimoniusis


в user32 - функция EnumWindows. EnumWindowsEx походу более не экспортируется. хотя, может и ошибаюсь...
Автор: ZalivkoDenis
Дата сообщения: 16.10.2008 13:26
Всем доброго времени суток!
По поводу потерянных функций:
Не подскажет ли кто-нить такому лошаре как я, ХДЕ в исходниках vcl отыскать функцию Assigned (CG2007)? В хелпосистеме написано, что она в System (на всяк случай ссылочка на локальный хелп: ms-help://borland.bds5/delphivclwin32/System_Assigned.html). Всё обыскал - ну НЕТУ её там . А всё дело в том, что я хотел заюзать её в билдере (в дельфи использую постоянно), а компилятор сказал, что никак не может её отыскать, я решил попробовать руками отыскать - ни_хрена... В делфи всё работает.
Внимание, вопрос: В чём фокус? (в билдере много разных способов обойтись и без неё, но хотелось бы именно так. Всем спасибо.)


Добавлено:
DmitryKz

Цитата:
Кажется, сообразил - pointer(целое) и integer(указатель). Так?

В этом поле можно хранить абсолютно всё. Я, например, храню в нём фрейм, который в себе несёт ещё кучу фреймов... - Не принципиально. Pointer - это указатель (!). А Integer несёт в себе значение определённого типа, котрое, в свою очередь, расположено где-то в памяти, и, если присвоить этой Data указатель на значение, то после можно будет прочитать это значение по адресу, хранящемуся в Data.
Автор: Glukodel
Дата сообщения: 16.10.2008 15:21
ZalivkoDenis

Цитата:
Внимание, вопрос: В чём фокус?

Фокус, похоже, в том, что есть несколько функций, кторые вшиты толи в компилятор толи где-то рядом... кроме Assigned не удается обнаружить исходники еще нескольких базовых функций... так что, если найдется - в студию для билдера проще всего, мабуть, написать свою - много там не будет

Цитата:
В этом поле можно хранить абсолютно всё. Я, например, храню в нём фрейм

идея хранить указатели как целые числа сколь не нова, столь же и порочна в большинстве случаев брать типизированный указатель и делать из него нетипизированный очень редко обснованный шаг(если такое вообще бывает , а для делфи/билдера - так вообще изврат, пока не доходит до каких-то жутко специфичных оптимизаций работы с данными в памяти...
Автор: hukker
Дата сообщения: 16.10.2008 20:25
Что за ошибка - '0,87' is not a valid floating point value. - ?
Delphi 2007 Lite, Win XP SP3
Автор: Dimoniusis
Дата сообщения: 16.10.2008 21:38
hukker число не является числом с плавающей точкой.

Скорее всего у тебя в Панель управления - Языки и настройка - региональные параметры стоит разделитель целой и дробной части "." - точка. А тут ты запятую используешь - отсюда и ошибка.

В Дельфи можно переопределить при желании разделитель (но иногда бажит это), либо заменять в строках его на правильный. Узнать/сменить текущий глобальная переменная: DecimalSeparator (см так же SysUtils.pas)

Aladdinych EnumWindows и EnumChildWindows
Автор: Coltrain
Дата сообщения: 16.10.2008 21:40
hukker

Цитата:
Что за ошибка - '0,87' is not a valid floating point value

В каком случае она возникает? Если при преобразовании string в float-подобные типы, то в качестве разделителя десятичной части должна быть точка.
Если не хочешь заморачиваться с разделителями десятичной части - используй для преобразования функцию Val
Автор: DmitryKz
Дата сообщения: 17.10.2008 09:46
Ребята, скажите, пожалуйста, какие существуют средства контроля расхода памяти. Ну, допустим, скомпилил в среде проект, запустил на выполнение, программа занесла в БД данные, а затем при простое сжирает 100 мегабайт памяти. Как узнать, что занимает эту память?
Автор: ZalivkoDenis
Дата сообщения: 17.10.2008 11:27
DmitryKz
EurekaLog - очень даже может помочь . Пока я её не знал - проблем не было. Ну, вылетает иногда прога - да и хрен с ней. А вот когда поставил первый раз -- много нового о своих "неправильных" кодах узнал. Советую
Автор: DmitryKz
Дата сообщения: 17.10.2008 11:57
ZalivkoDenis
Спасибо
2All
Подскажите, где взять код кодера и декодера для хэш-функции crc32. Желательно, чтобы очень быстро работал. Даже, аще возможно, два варианта - на ассемблере и Дельфи.
Автор: Dimoniusis
Дата сообщения: 17.10.2008 13:26
DmitryKz декодера для crc32 не существует - это одностороннее преобразование, как и любая хеш функция (crc, md5, sha1 и тд).

Кодер взять можно например тут: http://www.szutils.net/Delphi/Delphi.php (Ctrl+F -> crc32)

В части случаев можно подобрать что-то, что имеет хеш как у тебя... Но не факт, что это будет тоже самое, что и было захешировано.
Автор: DmitryKz
Дата сообщения: 17.10.2008 18:44
Ребята, подскажите, как убрать полосы прокрутки в приложении MDI, когда дочерняя форма заходит за границы клиентской области главной формы. А, может, лучше, чтобы дочерняя форма не могла выйти за границы клиентской области. Дельфи 7.
Автор: iddqd2
Дата сообщения: 17.10.2008 20:42
DmitryKz
Могу предположить, что это может случиться либо при непродуманном проектирвоании дочерней формы, что мы с негодованием отметаем, либо при изменении размеров главного окна. В этом случае можно не давать изменять размеры главного окна меньше некоего предела.
Автор: Jokerjar79
Дата сообщения: 18.10.2008 15:08
DmitryKz, немного корявое решение:

Код: private
procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;

...

procedure TChildForm.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
var
WorkArea: TRect;
StickAt : Word;
begin
StickAt := 10;
WorkArea := ParentForm.ClientRect;
with WorkArea, Msg.WindowPos^ do
begin
Right:=Right-cx;
Bottom:=Bottom-cy;
if (abs(Left - x) <= StickAt) or (x < Left) then x := Left;
if (abs(Right - x) <= StickAt) or (x > Right) then x := Right - 4;
if (abs(Top - y) <= StickAt) or (y < Top) then y := Top;
if (abs(Bottom - y) <= StickAt) or (y > Bottom) then y := Bottom - 4;
end;
inherited;
end;
Автор: DmitryKz
Дата сообщения: 18.10.2008 22:24
iddqd2
Ну не надо так уж сразу отвергать все возможности
Создаю новый проект, две формы, в одной свойство fmMDIForm, в другой - fmMDIChild. Запускаю - попробуйте подвигать дочернюю форму в разные стороны? Теперь запускаю какой-нибудь Фотошоп, открываю фотку, двигаю ее в разные стороны - скролов нет. Как в Дельфи убедиться в неправильно проектировании дочерней формы???
Автор: hukker
Дата сообщения: 18.10.2008 23:33

Цитата:
Dimoniusis

Точно, сработало! все как ты сказал. Благодарю! Что интересно, сразу после установки Delphi при запуске проекта в первый раз все считается, а при втором запуске проекта уже ошибочка.) Одна проблемка, для Лиры 9.0 разделителем является точка. Придется переключатся каждый раз.(
Автор: ShIvADeSt
Дата сообщения: 19.10.2008 05:17
hukker
Перед переводом строки в число сделай след преобразование
if Pos(',',MyFloat)>0 then MyFloat[Pos(',',MyFloat)]:='.'; // MyFloat - переменная которую преобразовываем
А еще лучше какую нить функцию написать, которая это будет делать.
Автор: Jokerjar79
Дата сообщения: 19.10.2008 05:35

Код: DecimalSeparator := '.';
f := StrToFloat('11.11');
DecimalSeparator := ',';
Автор: DmitryKz
Дата сообщения: 19.10.2008 21:28
Удалил, сорри, проблему по компоненту решил.
Jokerjar79
Спасибо за код, но я нашел изящное решение (в смысле, нашел, код)))))), а не решение). Все работает замечательно.
[more]
Код:
{ Избавление от ScrollBar'ов в MDI-форме. (С) Peter Below (TeamB) }
{ Не надо VCL переписывать }

unit MainForm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus;

type

TfMain = class(TForm)
MainMenu1: TMainMenu;
Newchild1: TMenuItem;
Newchild2: TMenuItem;
procedure Newchild2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
fMain: TfMain;

implementation

uses ChildForm;

{$R *.DFM}

procedure TfMain.Newchild2Click(Sender: TObject);
begin
with TfChild.Create(Application) do
Show();
end;

function ClientWindowProc( wnd: HWND; msg: Cardinal; wparam, lparam: Integer ): Integer; stdcall;
var
f: Pointer;
begin
f := Pointer( GetWindowLong( wnd, GWL_USERDATA ));
case msg of
WM_NCCALCSIZE:
if ( GetWindowLong( wnd, GWL_STYLE ) and
(WS_HSCROLL or WS_VSCROLL)) <> 0 then
SetWindowLong( wnd, GWL_STYLE, GetWindowLong( wnd, GWL_STYLE )
and not (WS_HSCROLL or WS_VSCROLL));
end;
Result := CallWindowProc( f, wnd, msg, wparam, lparam );
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
if ClientHandle <> 0 then begin
if GetWindowLong( ClientHandle, GWL_USERDATA ) <> 0 then
Exit; {cannot subclass client window, userdata already in use}
SetWindowLong(ClientHandle, GWL_USERDATA, SetWindowLong( ClientHandle,
GWL_WNDPROC, integer( @ClientWindowProc)));
end;

end;

end.
Автор: Dimoniusis
Дата сообщения: 20.10.2008 14:23
hukker

Код:
function MyFloat(Str: AnsiString): Extended;
beging
Str:=StringReplace(Str, '.', DecimalSeparator, [rfReplaceAll]);
Str:=StringReplace(Str, ',', DecimalSeparator, [rfReplaceAll]);
Result:=StrToFloat(Str);
end;
Автор: Maks150988
Дата сообщения: 20.10.2008 20:14
Ребята, подскажите, может быть есть способ нормального использования скинизации окошка программы на чистом Апи? Компонентов дофига, а толку что для VCL, да и большая часть замудренные если и с исходниками.
Есть у меня конечно тупая наработка чтобы картинку грузить на кнопку взависимости от ее состояния, но тупость в том что заметны границы кнопки прямоугольные. Собственно походу от этого не избавиться, если наверное не овнердравить еще кнопку дополнительно как-нибудь или сабклассить.
Может у кого-нибудь есть наработки? Спасибо.
Автор: Tantos
Дата сообщения: 21.10.2008 02:28
Maks150988
Регионы (можно вырезать окошки и кнопки по рисунку). Если программа будет работать под Windows XP и выше - манифесты.
Автор: MrZeRo
Дата сообщения: 21.10.2008 11:01
Maks150988
Поищи исходники библиотеки 1stClass, там можно подсмотреть пример работы с регионами.
Автор: delover
Дата сообщения: 21.10.2008 15:40
На инди ошибка, не знаю почему описываю ситуацию:

Код:
procedure TIdTCPConnection.SetIOHandler(AValue: TIdIOHandler); авалуе=nil
begin
if AValue <> FIOHandler then begin
if Assigned(AValue) and Assigned(AValue.Intercept) and Assigned(FIntercept) then begin
-----------------------------------------------------^ а вот сдесь наступает крах, хотя по идее не должно
EIdException.IfTrue(AValue.Intercept <> FIntercept, RSInterceptIsDifferent);
end;
if ManagedIOHandler and Assigned(FIOHandler) then begin
FreeAndNil(FIOHandler);
end;
Автор: delover
Дата сообщения: 22.10.2008 14:21
Похоже дело в аттаче, с аттачем уходит нормально, а без аттача, там надо посмотреть, подробностей ещё не знаю.
Автор: Pasha_new
Дата сообщения: 22.10.2008 18:15
Подскажите пожалуйста, от куда можно скачать Delphi? Какая версия последняя, а какая более стабильная? На какой работаете вы? Где можно скачать? Есть ли русификаторы на "эти" версии?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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