Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В каком классе появилось свойство caption 
V
    Опции темы
Akella
  Дата 1.2.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В каком классе появилось свойство caption?

Я не могу ни в гугле найти, ни в справке по D2007.
Может в дельфи есть способ, как узнать, в каком классе объявлено то или иное свойство.

Мну нужно что-то вроде этого
Код
WriteString(Controls[i].Name,    'Caption',   TWinControl(Controls[i]).caption);

Но у TWinControl нет свойства caption

Цитата

[DCC Error] uSaveWinControlsToIni.pas(93): E2362 Cannot access protected symbol TControl.Caption

PM MAIL   Вверх
northener
Дата 1.2.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Akella @  1.2.2011,  12:39 Найти цитируемый пост)
В каком классе появилось свойство caption?

Кажись в TControl. И в нем оно protected.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Akella
Дата 1.2.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Как мне добраться до него программно?
TControl(Controls[i]).caption тоже не прокатывает
PM MAIL   Вверх
Frees
Дата 1.2.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



изврат но всеже

Код

 type TPeekAtControl = class(TControl) end;
...
TPeekAtControl(Controls[i]).Caption := '55';


Это сообщение отредактировал(а) Frees - 1.2.2011, 13:38


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 1.2.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а восстанавливать из ini файла также?
PM MAIL   Вверх
Frees
Дата 1.2.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(Akella @  1.2.2011,  16:44 Найти цитируемый пост)
а восстанавливать из ini файла также?

какого еще ini файла?

Возможно тебе стоит TJvFormStorage посмотреть? 


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Snowy
Дата 1.2.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код
function GetCaption(c: TControl): string;
begin
  SetLength(result, c.GetTextLen + 1);
  c.GetTextBuf(PChar(result), Length(result));
end;

PM MAIL   Вверх
Akella
Дата 1.2.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Что нужно-то?
Есть некий редактор свойств компонентов. Пользователь может изменять свойства выбранного компонента.
Вот среди прочих свойств, есть свойство Caption.
Мне нужно сохранить и восстановить все свойства. В том числе и Caption. 
На форме самые разные компоненты: эдиты, чекбоксы, таблицы, метки, выпадающие списки и т.д.
PM MAIL   Вверх
Poseidon
Дата 1.2.2011, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Akella @  1.2.2011,  12:39 Найти цитируемый пост)
Но у TWinControl нет свойства caption
И нету. Полазь по VCL, у всех контролов, что используют caption, оно обьявлено отдельно для каждого в published. Т.е. не от родителя наследуется, а объявлено отдельно для каждого контрола.
Тебе нужно что-то вроди такого:
Код

if (Controls[i] is TLabel) then (Controls[i] as TLabel).Caption:= 'тест';

и так перебрать все возможные типы,
либо 
Код

TLabel(Controls[i]).caption:= 'тест';

если точно известен тип.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Akella
Дата 1.2.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Poseidon @  1.2.2011,  13:55 Найти цитируемый пост)
if (Controls[i] is TLabel) then 


Цитата(Akella @  1.2.2011,  13:54 Найти цитируемый пост)
На форме самые разные компоненты: эдиты, чекбоксы, таблицы, метки, выпадающие списки и т.д. 

 :(

Добавлено через 29 секунд
Цитата(Snowy @ 1.2.2011,  13:53)
Код
function GetCaption(c: TControl): string;
begin
  SetLength(result, c.GetTextLen + 1);
  c.GetTextBuf(PChar(result), Length(result));
end;

Не совсем понял, этот код... а как будет выглядеть код для SetCaption?

Добавлено через 3 минуты и 11 секунд
Правильно?

Код

function TSaveWinControlsToIni.SetCaption(s: string): TControl;
begin
  SetLength(s, result.GetTextLen + 1);
  result.GetTextBuf(PChar(s), Length(s));
end;

PM MAIL   Вверх
Frees
Дата 1.2.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



если не обязательно ini то можно посмотреть Сириализацию
http://www.rsdn.ru/article/delphi/serialization.xml

Это сообщение отредактировал(а) Frees - 1.2.2011, 14:10


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Poseidon
Дата 1.2.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Akella @  1.2.2011,  13:54 Найти цитируемый пост)
На форме самые разные компоненты: эдиты, чекбоксы, таблицы, метки, выпадающие списки и т.д
Ну начнем с того, что у эдитов точно, скорее всего у таблиц, точно у выпадающих списков нету свойства caption. Если лучше присмотреться, то может оказаться что там всего-навсего 3-5 типов компонент.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Akella
Дата 1.2.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Frees @  1.2.2011,  14:09 Найти цитируемый пост)
если не обязательно ini то можно посмотреть Сириализацию

Читал smile, для мну слишком наворочено

Добавлено через 2 минуты и 15 секунд
Цитата(Poseidon @  1.2.2011,  14:14 Найти цитируемый пост)
Ну начнем с того, что у эдитов точно, скорее всего у таблиц, точно у выпадающих списков нету свойства caption. Если лучше присмотреться, то может оказаться что там всего-навсего 3-5 типов компонент.

Да, ты прав. Может так и переделаю smile
PM MAIL   Вверх
northener
Дата 1.2.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Poseidon @  1.2.2011,  13:55 Найти цитируемый пост)
Цитата(Akella @  1.2.2011,  12:39 Найти цитируемый пост)
Но у TWinControl нет свойства caption
И нету.

Есть у TWinControl это свойство. Как у любого наследника TControl. А доступ к нему показан в первом ответе Frees. Только это не изврат, а нормальный способ. 
Непонятно правда для чего сохранять в настройках Caption компонента, если в данном компоненте это свойство не опубликовано?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Akella
Дата 1.2.2011, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Мне не у всех компонентов надо, а только у тех, которые имеют это свойство. Мне Poseidon дал правильный намёк. И скорее всего я так и сделаю. Да, придётся выполнять много проверок, но что поделаешь :(
PM MAIL   Вверх
Snowy
Дата 1.2.2011, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если нет Caption, то, как правило, есть Text.
GetText вернёт или то, или то.
Хотя по сути это одно и то же.
PM MAIL   Вверх
MetalFan
Дата 1.2.2011, 18:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



можно и мне намек дать?
Код

uses TypInfo

любое published св-во устанавливается с пол-пинка:
Код

if GetPropInfo(ASomeComponent, 'Caption') <> nil then
    SetStrProp( AComponent, 'Caption', lSomeNewCaption );


Это сообщение отредактировал(а) MetalFan - 1.2.2011, 18:45


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Keeper89
Дата 1.2.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



В 2007 через RTTI нельзя проверить есть Caption или нет?


--------------------
PM MAIL WWW   Вверх
MetalFan
Дата 1.2.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Keeper89, почему нельзя? GetPropInfo - не?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CodeMonkey
Дата 1.2.2011, 21:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Akella @  1.2.2011,  14:54 Найти цитируемый пост)
Что нужно-то?
Есть некий редактор свойств компонентов. Пользователь может изменять свойства выбранного компонента.
Вот среди прочих свойств, есть свойство Caption.
Мне нужно сохранить и восстановить все свойства. В том числе и Caption. 
На форме самые разные компоненты: эдиты, чекбоксы, таблицы, метки, выпадающие списки и т.д. 


В сторону TJvFormStorage совершенно правильно ткнули. А работает это через RTTI.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Poseidon
Дата 1.2.2011, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(northener @  1.2.2011,  17:20 Найти цитируемый пост)
Есть у TWinControl это свойство.
Да ну. Где?

unit Controls;
Код

{$IF DEFINED(CLR)}
  TWinControl = class(TControl, IWinControl)
  strict private
    class var
      FPendingParentWindow: HWND;
{$ELSE}
  TWinControl = class(TControl)
{$IFEND}
  private
    FAlignControlList: TList;
    FAlignLevel: Word;
    FBevelEdges: TBevelEdges;
    FBevelInner: TBevelCut;
    FBevelOuter: TBevelCut;
    FBevelKind: TBevelKind;
    FBevelWidth: TBevelWidth;
    FBorderWidth: TBorderWidth;
    FPadding: TPadding;
    FBrush: TBrush;
    FDockClients: TList;
    FDockManager: IDockManager;
    FImeMode: TImeMode;
    FImeName: TImeName;
    FParentWindow: HWND;
    FTabList: TList;
    FControls: TList;
    FWinControls: TList;
    FTabOrder: Integer;
    FTabStop: Boolean;
    FCtl3D: Boolean;
    FShowing: Boolean;
    FUseDockManager: Boolean;
    FDockSite: Boolean;
    FParentCtl3D: Boolean;
    FParentDoubleBuffered: Boolean;
    FPerformingShowingChanged: Boolean;
    FOnDockDrop: TDockDropEvent;
    FOnDockOver: TDockOverEvent;
    FOnEnter: TNotifyEvent;
    FOnExit: TNotifyEvent;
    FOnGetSiteInfo: TGetSiteInfoEvent;
    FOnKeyDown: TKeyEvent;
    FOnKeyPress: TKeyPressEvent;
    FOnKeyUp: TKeyEvent;
    FOnUnDock: TUnDockEvent;
    FOnAlignInsertBefore: TAlignInsertBeforeEvent;
    FOnAlignPosition: TAlignPositionEvent;
    FMouseInClient: Boolean;
    FMouseControl: TControl;
    FTouchControl: TControl;
{$IF DEFINED(CLR)}
    FDefWndProc: TFNWndProc;
{$ELSE}
    FDefWndProc: Pointer;
    FHandle: HWnd;
    FObjectInstance: Pointer;
{$IFEND}
    procedure AlignControl(AControl: TControl);
    procedure CalcConstraints(var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer);
    procedure DoPaddingChange(Sender: TObject);
    function GetAlignDisabled: Boolean;
    function GetControl(Index: Integer): TControl;
    function GetControlCount: Integer;
    function GetDockClientCount: Integer;
    function GetDockClients(Index: Integer): TControl;
    function GetHandle: HWND;
    function GetParentBackground: Boolean; inline;
    function GetTabOrder: TTabOrder;
    function GetVisibleDockClientCount: Integer;
    procedure Insert(AControl: TControl);
    procedure InvalidateFrame;
    procedure InvokeHelp;
    function IsCtl3DStored: Boolean;
    function IsDoubleBufferedStored: Boolean;
    function PrecedingWindow(Control: TWinControl): HWND;
    procedure ReadDesignSize(Reader: TReader);
    procedure Remove(AControl: TControl);
    procedure RemoveFocus(Removing: Boolean);
    procedure SetBevelCut(Index: Integer; const Value: TBevelCut);
    procedure SetBevelEdges(const Value: TBevelEdges);
    procedure SetBevelKind(const Value: TBevelKind);
    procedure SetBevelWidth(const Value: TBevelWidth);
    procedure SetBorderWidth(Value: TBorderWidth);
    procedure SetCtl3D(Value: Boolean);
    procedure SetDockSite(Value: Boolean);
    procedure SetDoubleBuffered(Value: Boolean);
    procedure SetPadding(const Value: TPadding);
    procedure SetParentCtl3D(Value: Boolean);
    procedure SetParentWindow(Value: HWND);
    procedure SetTabOrder(Value: TTabOrder);
    procedure SetTabStop(Value: Boolean);
    procedure SetUseDockManager(Value: Boolean);
    procedure SetZOrderPosition(Position: Integer);
    procedure UpdateTabOrder(Value: TTabOrder);
    procedure UpdateShowing;
    procedure WriteDesignSize(Writer: TWriter);
    function IsMenuKey(var Message: TWMKey): Boolean;
    procedure WMInputLangChange(var Message: TMessage); message WM_INPUTLANGCHANGE;
    procedure CMInputLangChange(var Message: TMessage); message CM_INPUTLANGCHANGE;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
    procedure WMNotify(var Message: TWMNotify); message WM_NOTIFY;
    procedure WMSysColorChange(var Message: TWMSysColorChange); message WM_SYSCOLORCHANGE;
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
    procedure WMCompareItem(var Message: TWMCompareItem); message WM_COMPAREITEM;
    procedure WMDeleteItem(var Message: TWMDeleteItem); message WM_DELETEITEM;
    procedure WMDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
    procedure WMMeasureItem(var Message: TWMMeasureItem); message WM_MEASUREITEM;
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
    procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
    procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
    procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
    procedure WMSysKeyDown(var Message: TWMSysKeyDown); message WM_SYSKEYDOWN;
    procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
    procedure WMSysKeyUp(var Message: TWMSysKeyUp); message WM_SYSKEYUP;
    procedure WMChar(var Message: TWMChar); message WM_CHAR;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
    procedure WMCharToItem(var Message: TWMCharToItem); message WM_CHARTOITEM;
    procedure WMParentNotify(var Message: TWMParentNotify); message WM_PARENTNOTIFY;
    procedure WMVKeyToItem(var Message: TWMVKeyToItem); message WM_VKEYTOITEM;
    procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY;
    procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE;
    procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
    procedure WMNCDestroy(var Message: TWMNCDestroy); message WM_NCDESTROY;
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
    procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
    procedure WMQueryNewPalette(var Message: TMessage); message WM_QUERYNEWPALETTE;
    procedure WMPaletteChanged(var Message: TMessage); message WM_PALETTECHANGED;
    procedure WMWinIniChange(var Message: TMessage); message WM_WININICHANGE;
    procedure WMFontChange(var Message: TMessage); message WM_FONTCHANGE;
    procedure WMTimeChange(var Message: TMessage); message WM_TIMECHANGE;
    procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMIMEStartComp(var Message: TMessage); message WM_IME_STARTCOMPOSITION;
    procedure WMIMEEndComp(var Message: TMessage); message WM_IME_ENDCOMPOSITION;
    procedure WMContextMenu(var Message: TWMContextMenu); message WM_CONTEXTMENU;
    procedure WMGesture(var Message: TMessage); message WM_GESTURE;
    procedure WMGestureNotify(var Message: TWMGestureNotify); message WM_GESTURENOTIFY;
    procedure WMTabletQuerySystemGestureStatus(var Message: TMessage); message WM_TABLET_QUERYSYSTEMGESTURESTATUS;
    procedure CMChanged(var Message: TCMChanged); message CM_CHANGED;
    procedure CMChildKey(var Message: TCMChildKey); message CM_CHILDKEY;
    procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
    procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
    procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
    procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    procedure CMBorderChanged(var Message: TMessage); message CM_BORDERCHANGED;
    procedure CMCursorChanged(var Message: TMessage); message CM_CURSORCHANGED;
    procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
    procedure CMParentCtl3DChanged(var Message: TMessage); message CM_PARENTCTL3DCHANGED;
    procedure CMParentDoubleBufferedChanged(var Message: TMessage); message CM_PARENTDOUBLEBUFFEREDCHANGED;
    procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
    procedure CMShowHintChanged(var Message: TMessage); message CM_SHOWHINTCHANGED;
    procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
    procedure CMExit(var Message: TCMExit); message CM_EXIT;
    procedure CMDesignHitTest(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;
    procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
    procedure CMSysFontChanged(var Message: TMessage); message CM_SYSFONTCHANGED;
    procedure CMWinIniChange(var Message: TWMWinIniChange); message CM_WININICHANGE;
    procedure CMFontChange(var Message: TMessage); message CM_FONTCHANGE;
    procedure CMTimeChange(var Message: TMessage); message CM_TIMECHANGE;
    procedure CMDrag(var Message: TCMDrag); message CM_DRAG;
    procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
    procedure CNKeyUp(var Message: TWMKeyUp); message CN_KEYUP;
    procedure CNChar(var Message: TWMChar); message CN_CHAR;
    procedure CNSysKeyDown(var Message: TWMKeyDown); message CN_SYSKEYDOWN;
    procedure CNSysChar(var Message: TWMChar); message CN_SYSCHAR;
    procedure CMRecreateWnd(var Message: TMessage); message CM_RECREATEWND;
    procedure CMInvalidate(var Message: TMessage); message CM_INVALIDATE;
    procedure CMBiDiModeChanged(var Message: TMessage); message CM_BIDIMODECHANGED;
    procedure CMDoubleBufferedChanged(var Message: TMessage); message CM_DOUBLEBUFFEREDCHANGED;
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
    procedure WMPrintClient(var Message: TWMPrintClient); message WM_PRINTCLIENT;
    procedure CMTabletOptionsChanged(var Message: TMessage); message CM_TABLETOPTIONSCHANGED;
{$IF NOT DEFINED(CLR)}
    procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;
    procedure CMControlListChange(var Message: TMessage); message CM_CONTROLLISTCHANGE;
    procedure CMControlListChanging(var Message: TMessage); message CM_CONTROLLISTCHANGING;
    procedure CMDockClient(var Message: TCMDockClient); message CM_DOCKCLIENT;
    procedure CMUnDockClient(var Message: TCMUnDockClient); message CM_UNDOCKCLIENT;
    procedure CMFloat(var Message: TCMFloat); message CM_FLOAT;
{$ELSE}
    function GetWindowHandle: HWND;
    procedure SetWindowHandle(Value: HWND);
    procedure WMIMEChar(var Message: TWMChar); message WM_IME_CHAR;
  public
    function GetTextPiece(Size: Integer): TCaption; override;
    function GetTextLen: Integer; override;
    procedure SetText(const Value: TCaption); override;
{$IFEND}
  protected
    FDoubleBuffered: Boolean;
    FInImeComposition: Boolean;
    FDesignSize: TPoint;
{$IF DEFINED(CLR)}
    FHandle: THWndWrapper;
{$IFEND}
    procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
    procedure AddBiDiModeExStyle(var ExStyle: DWORD);
    procedure AssignTo(Dest: TPersistent); override;
    procedure AdjustClientRect(var Rect: TRect); virtual;
    procedure AdjustSize; override;
    procedure AlignControls(AControl: TControl; var Rect: TRect); virtual;
    procedure ArrangeControl(AControl: TControl; const ParentSize: TPoint; AAlign: TAlign;
      AAlignInfo: TAlignInfo; var Rect: TRect; UpdateAnchorOrigin: Boolean = False);
    function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override;
    function CanResize(var NewWidth, NewHeight: Integer): Boolean; override;
    procedure ChangeScale(M, D: Integer); override;
    procedure ConstrainedResize(var MinWidth, MinHeight, MaxWidth,
      MaxHeight: Integer); override;
    procedure ControlsAligned; dynamic;
    function CreateDockManager: IDockManager; dynamic;
    procedure CreateHandle; virtual;
    procedure CreateParams(var Params: TCreateParams); virtual;
    procedure CreateWindowHandle(const Params: TCreateParams); virtual;
    procedure CreateWnd; virtual;
    function CustomAlignInsertBefore(C1, C2: TControl): Boolean; virtual;
    procedure CustomAlignPosition(Control: TControl; var NewLeft, NewTop, NewWidth,
      NewHeight: Integer; var AlignRect: TRect; AlignInfo: TAlignInfo); virtual;
    procedure DefineProperties(Filer: TFiler); override;
    procedure DestroyHandle; virtual;
    procedure DestroyWindowHandle; virtual;
    procedure DestroyWnd; virtual;
    procedure DoAddDockClient(Client: TControl; const ARect: TRect); dynamic;
    procedure DockOver(Source: TDragDockObject; X, Y: Integer; State: TDragState;
      var Accept: Boolean); dynamic;
    function DockReplaceDockClient(Client: TControl;
      NewDockSite: TWinControl; DropControl: TControl;
      ControlSide: TAlign; ReplacementClient: TControl): Boolean; virtual;
    procedure DoDockOver(Source: TDragDockObject; X, Y: Integer; State: TDragState;
      var Accept: Boolean); dynamic;
    procedure DoEnter; dynamic;
    procedure DoExit; dynamic;
    procedure DoFlipChildren; dynamic;
    function DoKeyDown(var Message: TWMKey): Boolean;
    function DoKeyPress(var Message: TWMKey): Boolean;
    function DoKeyUp(var Message: TWMKey): Boolean;
    procedure DoRemoveDockClient(Client: TControl); dynamic;
    function DoUnDock(NewTarget: TWinControl; Client: TControl): Boolean; dynamic;
    function FindNextControl(CurControl: TWinControl;
      GoForward, CheckTabStop, CheckParent: Boolean): TWinControl;
    procedure FixupTabList;
    function GetActionLinkClass: TControlActionLinkClass; override;
    function GetClientOrigin: TPoint; override;
    function GetClientRect: TRect; override;
    function GetControlExtents: TRect; virtual;
    function GetDeviceContext(var WindowHandle: HWND): HDC; overload; override;
    function GetParentHandle: HWND;
    procedure GetSiteInfo(Client: TControl; var InfluenceRect: TRect;
      MousePos: TPoint; var CanDock: Boolean); dynamic;
    function GetTopParentHandle: HWnd;
    procedure InvalidateDockHostSite(FocusLost: Boolean);
    function IsControlMouseMsg(var Message: TWMMouse): Boolean;
    function IsControlActivateMsg(var Message: TWMMouseActivate; Control: TControl = nil): Boolean;
    function IsQualifyingSite(const Client: TControl): Boolean; dynamic;
    procedure KeyDown(var Key: Word; Shift: TShiftState); dynamic;
    procedure KeyUp(var Key: Word; Shift: TShiftState); dynamic;
    procedure KeyPress(var Key: Char); dynamic;
    procedure MainWndProc(var Message: TMessage);
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure NotifyControls(Msg: Word);
    procedure PaintControls(DC: HDC; First: TControl);
    procedure PaintHandler(var Message: TWMPaint);
    procedure PaintWindow(DC: HDC); virtual;
    function PaletteChanged(Foreground: Boolean): Boolean; override;
    procedure ReadState(Reader: TReader); override;
    procedure RecreateWnd;
    procedure ReloadDockedControl(const AControlName: string;
      var AControl: TControl); dynamic;
    procedure ResetIme;
    function ResetImeComposition(Action: DWORD): Boolean;
    procedure RequestAlign; override;
    procedure ScaleControls(M, D: Integer);
    procedure ScalePadding(M, D: Integer);
    procedure SelectFirst;
    procedure SelectNext(CurControl: TWinControl;
      GoForward, CheckTabStop: Boolean);
    procedure SetChildOrder(Child: TComponent; Order: Integer); override;
    procedure SetIme;
    function SetImeCompositionWindow(Font: TFont; XPos, YPos: Integer): Boolean;
    procedure SetParent(AParent: TWinControl); override;
    procedure SetParentBackground(Value: Boolean); virtual;
    procedure SetParentDoubleBuffered(Value: Boolean); virtual;
    procedure SetZOrder(TopMost: Boolean); override;
    procedure ShowControl(AControl: TControl); virtual;
    procedure UpdateBounds;
    procedure UpdateControlOriginalParentSize(AControl: TControl; var AOriginalParentSize: TPoint); virtual;
    procedure UpdateRecreatingFlag(Recreating: Boolean);
    procedure UpdateUIState(CharCode: Word);
    procedure WndProc(var Message: TMessage); override;
{$IF DEFINED(CLR)}
    procedure FocusChanged(NewFocusControl: TWinControl); virtual;
    procedure FloatControl(DockSource: TDragDockObject); override;
    function DockClient(DockSource: TDragDockObject; MousePos: TPoint): Integer; virtual; // replaces use of CM_DockClient
    function UndockClient(NewTarget, Client: TControl): Boolean; virtual; // replaces use of CM_UndockClient
    procedure ControlChange(Inserting: Boolean; Child: TControl); virtual; // replaces use of CM_CONTROLCHANGE
    procedure ControlListChange(Inserting: Boolean; Child: TControl); virtual; // replaces use of CM_CONTROLLISTCHANGE
    procedure ControlListChanging(Inserting: Boolean; Child: TControl; AParent: TWinControl); overload; virtual; deprecated; // replaces use of CM_CONTROLLISTCHANGING
    procedure ControlListChanging(Inserting: Boolean; var Item: TControlListItem); overload; virtual; // replaces use of CM_CONTROLLISTCHANGING
    procedure CreateSubClass(var Params: TCreateParams; ControlClassName: string);
    procedure DoMouseEnter; override;
    procedure DoMouseLeave; override;
    function GetDeviceContext(var WindowHandle: THWndWrapper): HDC; overload; override;
{$ELSE}
    procedure CreateSubClass(var Params: TCreateParams; ControlClassName: PChar);
    procedure RemoveWindowProps;
{$IFEND}
    property AlignControlList: TList read FAlignControlList;
    property BevelEdges: TBevelEdges read FBevelEdges write SetBevelEdges default [beLeft, beTop, beRight, beBottom];
    property BevelInner: TBevelCut index 0 read FBevelInner write SetBevelCut default bvRaised;
    property BevelOuter: TBevelCut index 1 read FBevelOuter write SetBevelCut default bvLowered;
    property BevelKind: TBevelKind read FBevelKind write SetBevelKind default bkNone;
    property BevelWidth: TBevelWidth read FBevelWidth write SetBevelWidth default 1;
    property BorderWidth: TBorderWidth read FBorderWidth write SetBorderWidth default 0;
    property Ctl3D: Boolean read FCtl3D write SetCtl3D stored IsCtl3DStored;
    property ImeMode: TImeMode read FImeMode write FImeMode default imDontCare;
    property ImeName: TImeName read FImeName write FImeName;
    property ParentBackground: Boolean read GetParentBackground write SetParentBackground;
    property ParentCtl3D: Boolean read FParentCtl3D write SetParentCtl3D default True;
{$IF DEFINED(CLR)}
    property DefWndProc: TFNWndProc read FDefWndProc write FDefWndProc;
    property WindowHandle: HWND read GetWindowHandle write SetWindowHandle;
{$ELSE}
    property DefWndProc: Pointer read FDefWndProc write FDefWndProc;
    property WindowHandle: HWnd read FHandle write FHandle;
{$IFEND}
    property OnAlignInsertBefore: TAlignInsertBeforeEvent read FOnAlignInsertBefore
      write FOnAlignInsertBefore;
    property OnAlignPosition: TAlignPositionEvent read FOnAlignPosition write FOnAlignPosition;
    property OnDockDrop: TDockDropEvent read FOnDockDrop write FOnDockDrop;
    property OnDockOver: TDockOverEvent read FOnDockOver write FOnDockOver;
    property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
    property OnExit: TNotifyEvent read FOnExit write FOnExit;
    property OnGetSiteInfo: TGetSiteInfoEvent read FOnGetSiteInfo write FOnGetSiteInfo;
    property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
    property OnKeyPress: TKeyPressEvent read FOnKeyPress write FOnKeyPress;
    property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp;
    property OnUnDock: TUnDockEvent read FOnUnDock write FOnUnDock;
  public
    constructor Create(AOwner: TComponent); override;
{$IF DEFINED(CLR)}
    class function CreateParented(AParentWindow: HWND): TWinControl;
{$ELSE}
    constructor CreateParented(ParentWindow: HWnd);
{$IFEND}
    class function CreateParentedControl(ParentWindow: HWND): TWinControl;
    destructor Destroy; override;
    procedure Broadcast(var Message);
    function CanFocus: Boolean; dynamic;
    function ContainsControl(Control: TControl): Boolean;
    function ControlAtPos(const Pos: TPoint; AllowDisabled: Boolean;
      AllowWinControls: Boolean = False; AllLevels: Boolean = False): TControl;
    procedure DefaultHandler(var Message); override;
    procedure DisableAlign; inline;
    property DockClientCount: Integer read GetDockClientCount;
    property DockClients[Index: Integer]: TControl read GetDockClients;
    procedure DockDrop(Source: TDragDockObject; X, Y: Integer); dynamic;
    property DockSite: Boolean read FDockSite write SetDockSite default False;
    property DockManager: IDockManager read FDockManager write FDockManager;
    property DoubleBuffered: Boolean read FDoubleBuffered write SetDoubleBuffered stored IsDoubleBufferedStored;
    procedure EnableAlign;
    function FindChildControl(const ControlName: string): TControl;
    procedure FlipChildren(AllLevels: Boolean); dynamic;
    function Focused: Boolean; dynamic;
    procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
    procedure GetTabControlList(List: TList); dynamic;
    procedure GetTabOrderList(List: TList); dynamic;
    function HandleAllocated: Boolean;
    procedure HandleNeeded;
    procedure InsertControl(AControl: TControl);
    procedure Invalidate; override;
    procedure PaintTo(DC: HDC; X, Y: Integer); overload;
    procedure PaintTo(Canvas: TCanvas; X, Y: Integer); overload;
    function PreProcessMessage(var Msg: TMsg): Boolean; dynamic;
    procedure RemoveControl(AControl: TControl);
    procedure Realign; inline;
    procedure Repaint; override;
    procedure ScaleBy(M, D: Integer);
    procedure ScrollBy(DeltaX, DeltaY: Integer);
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
    procedure SetDesignVisible(Value: Boolean); override;
    procedure SetFocus; virtual;
    procedure Update; override;
    procedure UpdateControlState;
    property AlignDisabled: Boolean read GetAlignDisabled;
    property MouseInClient: Boolean read FMouseInClient;
    property VisibleDockClientCount: Integer read GetVisibleDockClientCount;
    property Brush: TBrush read FBrush;
    property Controls[Index: Integer]: TControl read GetControl;
    property ControlCount: Integer read GetControlCount;
    property Handle: HWND read GetHandle;
    property Padding: TPadding read FPadding write SetPadding;
    property ParentDoubleBuffered: Boolean read FParentDoubleBuffered write SetParentDoubleBuffered default True;
    property ParentWindow: HWND read FParentWindow write SetParentWindow;
    property Showing: Boolean read FShowing;
    property TabOrder: TTabOrder read GetTabOrder write SetTabOrder default -1;
    property TabStop: Boolean read FTabStop write SetTabStop default False;
    property UseDockManager: Boolean read FUseDockManager write SetUseDockManager default False;
  end;

или я не там смотрю?

Добавлено через 1 минуту и 59 секунд
Цитата(Snowy @  1.2.2011,  18:17 Найти цитируемый пост)
Если нет Caption, то, как правило, есть Text.
Ну так Caption и Text - это как бы разные вещи. Caption редактировать нельзя, а Text зачастую можно.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 1.2.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Poseidon @  1.2.2011,  22:10 Найти цитируемый пост)
Ну так Caption и Text - это как бы разные вещи. Caption редактировать нельзя, а Text зачастую можно.
Именно поэтому они называются по разному.
А по сути это одно и то же.
Если ты попробуешь получить Caption у TEdit, то получишь Text.
Если попробуешьполучить Text у TLabel - получишь Caption.
Их разделение чисто логическое.
А по сути - это текст контрола.
Если брать WinAPI - там они не различаются.
PM MAIL   Вверх
cat512
Дата 1.2.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Цитата(northener @ 1.2.2011,  17:20)
Цитата(Poseidon @  1.2.2011,  13:55 Найти цитируемый пост)
Цитата(Akella @  1.2.2011,  12:39 Найти цитируемый пост)
Но у TWinControl нет свойства caption
И нету.

Есть у TWinControl это свойство. Как у любого наследника TControl. А доступ к нему показан в первом ответе Frees. Только это не изврат, а нормальный способ. 
Непонятно правда для чего сохранять в настройках Caption компонента, если в данном компоненте это свойство не опубликовано?

На мой взгляд, этот вариант оправдан лишь в одном случае:
если нет возможности создать потомка, но при этом необходимо добраться к свойству. Во всех остальных это есть ИЗВРАТ. При чём гарантий, что такой код будет "глотаться" новыми версиями компилятора, нам никто не даёт!
2 AkellaКак раз для твоей задачи, идеально подходит модуль TypInfo, в котором реализованна возможность работы с RTTI(Интроспекция).Ты можешь с его помощью проверять, есть ли у объекта определённое сойство, и если такое есть, то получать/инициализировать значение эт. свойства. Соответственно, модуль работает только с published свойствами.
PM MAIL   Вверх
Poseidon
Дата 2.2.2011, 00:21 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Snowy @  1.2.2011,  23:05 Найти цитируемый пост)
А по сути это одно и то же.
Пустая строка в Text для Edit - нормальное явление. Ждем от пользователя ввода данных. Пустая строка в Caption для Label - а нафига тогда вообще этот Label? Так что это совсем не одно и то же.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Akella
Дата 2.2.2011, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(MetalFan @  1.2.2011,  18:21 Найти цитируемый пост)
if GetPropInfo(

Да, как проверить наличе свойства не проблема.

Проблема в том, что вместо простого доступа к свойству Caption, как например к Visible
TWinControl(Controls[i]).visible
придётся городить огород с проверкой на тип конкретного компонента
if ... is TcxCheckBox then
if ... is TLabel then
if ... is TещёКакойТоТамКомпонент then

Добавлено через 4 минуты и 3 секунды
Цитата(Keeper89 @  1.2.2011,  19:08 Найти цитируемый пост)
В 2007 через RTTI нельзя проверить есть Caption или нет?

Легко smile

Добавлено через 4 минуты и 35 секунд
Цитата(CodeMonkey @  1.2.2011,  21:49 Найти цитируемый пост)
В сторону TJvFormStorage совершенно правильно ткнули. 

Я не хочу использовать джедаев

Добавлено через 7 минут и 3 секунды
Цитата(cat512 @  1.2.2011,  23:55 Найти цитируемый пост)
2 AkellaКак раз для твоей задачи, идеально подходит модуль TypInfo, в котором реализованна возможность работы с RTTI(Интроспекция).Ты можешь с его помощью проверять, есть ли у объекта определённое сойство, и если такое есть, то получать/инициализировать значение эт. свойства. Соответственно, модуль работает только с published свойствами. 

Та это понятно, а не понятно как это реализовать 1-3 строками кода. Чтобы можно было сохранить значение Caption, а потом восстановить. В цикле.
PM MAIL   Вверх
MetalFan
Дата 2.2.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Akella @  2.2.2011,  10:11 Найти цитируемый пост)
Да, как проверить наличе свойства не проблема.

А в чем проблема? установка/чтение свойства по его PropInfo?

я же уже "намекал" тут


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CodeMonkey
Дата 2.2.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Akella @  2.2.2011,  11:11 Найти цитируемый пост)
Я не хочу использовать джедаев


Т.е. ты полагаешь, что реализованы они божьим духом и в твоём коде невоспроизводимы в принципе?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 2.2.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Да мне всё равно, кем они реализованы. Я просто не хочу использовать эту библиотеку и всё. Я наоборот стараюсь удалить из всех проектов использование этой библиотеки.
PM MAIL   Вверх
northener
Дата 2.2.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Akella @  2.2.2011,  14:16 Найти цитируемый пост)
Да мне всё равно, кем они реализованы. Я просто не хочу использовать эту библиотеку и всё.

Давно говорил и говорю. Библиотека RxLib нужна не столько для того чтобы ее явно использовать, сколько для того чтобы в ее исходниках смотреть как умные люди сделали что-то. То же касается и ее потомка JEDI.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Snowy
Дата 2.2.2011, 15:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А почему просто не сделать SaveComponent и LoadComponent?

Цитата(northener @  2.2.2011,  14:47 Найти цитируемый пост)
Давно говорил и говорю. Библиотека RxLib нужна не столько для того чтобы ее явно использовать, сколько для того чтобы в ее исходниках смотреть как умные люди сделали что-то. То же касается и ее потомка JEDI.
Хочешь посмотреть, как делают умные люди? Ссмотри сырцы VCL/RTL
А в код джедаев за этим лазить безполезно, ибо там корябают все кому не лень.
И многие из них далеко не умные...
PM MAIL   Вверх
CodeMonkey
Дата 2.2.2011, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(Snowy @  2.2.2011,  16:01 Найти цитируемый пост)
Хочешь посмотреть, как делают умные люди? Ссмотри сырцы VCL/RTL
А в код джедаев за этим лазить безполезно, ибо там корябают все кому не лень.
И многие из них далеко не умные... 


Особенно GetMem.inc образец кода, ага.

Или DBXJSON.pas

Код
class function TJSONString.Hex(const Digit: Integer): Byte;
var
  HexData: TBytes;
begin
  SetLength(HexData,16);
  HexData[0] := Ord('0');
  HexData[1] := Ord('1');
  HexData[2] := Ord('2');
  HexData[3] := Ord('3');
  HexData[4] := Ord('4');
  HexData[5] := Ord('5');
  HexData[6] := Ord('6');
  HexData[7] := Ord('7');
  HexData[8] := Ord('8');
  HexData[9] := Ord('9');
  HexData[10] := Ord('A');
  HexData[11] := Ord('B');
  HexData[12] := Ord('C');
  HexData[13] := Ord('D');
  HexData[14] := Ord('E');
  HexData[15] := Ord('F');
  Result := HexData[Digit];
end;


Надо полагать, это писали "далеко умные" люди.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 2.2.2011, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Snowy @  2.2.2011,  15:01 Найти цитируемый пост)
А почему просто не сделать SaveComponent и LoadComponent?


Много компонентов, много свойств. Загрузка формы будет долгая.
PM MAIL   Вверх
MetalFan
Дата 2.2.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Непонятно, почему автор игнорит мое предложение читать/писать св-ва (Caption и по.) через TypInfo...
Ну да ладно.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Keeper89
Дата 2.2.2011, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



MetalFan, ну вот так нас игнорят =)

Вот вариант с API:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    btn1: TButton;
    mmo1: TMemo;
    procedure btn1Click(Sender: TObject);
    procedure mmo1Click(Sender: TObject);
    procedure edt1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetText(ObjectHandle: THandle): string;
var
  dwBytesNeeded : DWord;
  pszWindowText : PChar;
begin
  Result := EmptyStr;
  dwBytesNeeded := SendMessage(ObjectHandle, WM_GETTEXTLENGTH, 0, 0);
  if dwBytesNeeded > 0 then
  begin
    GetMem(pszWindowText, dwBytesNeeded + 1);
    try
      ZeroMemory(pszWindowText, dwBytesNeeded + 1);
      if SendMessage(ObjectHandle, WM_GETTEXT, dwBytesNeeded + 1, lParam(pszWindowText)) > 0 then
        Result := pszWindowText;
    finally
      FreeMem(pszWindowText);
    end;
  end;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  Caption := 'Button ' + GetText(btn1.Handle);
end;

procedure TForm1.mmo1Click(Sender: TObject);
begin
  Caption := 'Memo ' + GetText(mmo1.Handle);
end;

procedure TForm1.edt1Click(Sender: TObject);
begin
  Caption := 'Edit ' + GetText(edt1.Handle);
end;

end.




--------------------
PM MAIL WWW   Вверх
northener
Дата 3.2.2011, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Snowy @  2.2.2011,  15:01 Найти цитируемый пост)
А в код джедаев за этим лазить безполезно, ибо там корябают все кому не лень.


1. Ну вообще-то я в основном говорил о RXLib. А в её код смотрят даже разработчики Дельфи. О чем свидетельствуют появившиеся не так давно в Дельфи новые модули с функциональностью ряда модулей RxLib и даже с теми же именами.
2. Что же касается именно JEDI, то тут конечно имеются оговорки. И в JEDI может появиться бредовый код. Но нельзя не отметить, что в JEDI есть много ценного, чего в Дельфи пока нет. 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CodeMonkey
Дата 3.2.2011, 04:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(MetalFan @  2.2.2011,  21:26 Найти цитируемый пост)
Непонятно, почему автор игнорит мое предложение читать/писать св-ва (Caption и по.) через TypInfo...
Ну да ладно. 


Как непонятно? Ведь это использует JEDI, а автора от них тошнит!


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 3.2.2011, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(MetalFan @ 2.2.2011,  20:26)
Непонятно, почему автор игнорит мое предложение читать/писать св-ва (Caption и по.) через TypInfo...
Ну да ладно.

Ты не прав. Я читал его. И ответил на него: http://forum.vingrad.ru/index.php?showtopi...t&p=2292644
Может я не понял, что ты хотел сказать мне?

Добавлено через 2 минуты и 58 секунд
Цитата(MetalFan @  1.2.2011,  18:21 Найти цитируемый пост)
if GetPropInfo(ASomeComponent, 'Caption') <> nil then
    SetStrProp( AComponent, 'Caption', lSomeNewCaption );



if GetPropInfo(Components[i], 'Caption') <> nil then
    SetStrProp(Components[i], 'Caption', SomeNewCaption);  smile

Добавлено через 3 минуты и 6 секунд
Надо попробовать
PM MAIL   Вверх
CROTishka
Дата 3.2.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Ну, можно и не как Посейдон предложил, а через RTTI читать свойство c именем Caption. Работать будет для всех компонент, а не только предопределенных.

Добавлено через 1 минуту и 36 секунд
Цитата

if GetPropInfo(Components[i], 'Caption') <> nil then
    SetStrProp(Components[i], 'Caption', SomeNewCaption);

а, ну я вижу вы сами разобрались.
PM MAIL   Вверх
MetalFan
Дата 3.2.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Akella @  3.2.2011,  10:25 Найти цитируемый пост)
Надо попробовать 

давно надо было попробовать)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Akella
Дата 3.2.2011, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



да уж, спехом читал всё по диагонали  smile 
PM MAIL   Вверх
Akella
Дата 3.2.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



MetalFan, супер. Спасибо. Вопрос решён.


Вот так сохраняем:
Код

if GetPropInfo(Controls[i], 'Caption') <> nil then
  WriteString(Controls[i].Name, 'Caption', GetStrProp(Controls[i], 'Caption'));


Вот так восстанавливаем:
Код

if GetPropInfo(ParentWinControl.FindChildControl(Sections[i]), 'Caption') <> nil then
  begin
    sCaption := ReadString(Sections[i], 'Caption', GetStrProp(ParentWinControl.FindChildControl(Sections[i]), 'Caption'));
    SetStrProp(ParentWinControl.FindChildControl(Sections[i]), 'Caption', sCaption);
  end;

PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1283 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.