Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.03.14;
Скачать: [xml.tar.bz2];

Вниз

помогите пожалуйста написать программу в Delphi   Найти похожие ветки 

 
chery ©   (2009-12-23 12:16) [40]

ну что может у кого нибудь появились мысли как сохранит положение тулбара кода он не на контроле и выглядит как отдельное окно? Просто у меня уже ничего не получается)))=


 
StriderMan ©   (2009-12-23 12:16) [41]

Че-то у меня кончились идеи как программно стащить ToolBar в свободное плавание, кроме как сгенерить цепочку сообщений, эмулирующих стаскивание мышью :D


 
chery ©   (2009-12-23 12:17) [42]


> В Мурманске не все пиво фиговое. Я б даж сказал, получше,
>  чем в Питере.

у нас пиво с местной пивоварни(пилегрим) просто шикарное((=


 
chery ©   (2009-12-23 12:18) [43]


> Че-то у меня кончились идеи как программно стащить ToolBar
> в свободное плавание, кроме как сгенерить цепочку сообщений,
>  эмулирующих стаскивание мышью :D

вот и я не знаю как в программе описать "стаскивание" тулбара.


 
StriderMan ©   (2009-12-23 12:18) [44]


> chery ©   (23.12.09 12:16) [40]

Проблема не в сохранении и загрузке, а в том как сделать программно тулбар "плавающим". Че-то я туплю. Мастера, ау!


 
chery ©   (2009-12-23 12:23) [45]


>  Мастера, ау!

у меня такое подозрение, что мастера либо спят еще, либо уже трудятся на работе(=


 
Anatoly Podgoretsky ©   (2009-12-23 13:19) [46]

> Petr V. Abramov  (23.12.2009 00:57:29)  [29]

Раз подписался, то читай.


 
chery ©   (2009-12-23 13:27) [47]


> Раз подписался, то читай

(=


 
MacroDenS ©   (2009-12-23 14:55) [48]

chery © посмотри может здесь что полезного найдешь http://www.delphi3000.com/articles/article_1010.asp?SK=
правда там на инглише


 
Ega23 ©   (2009-12-23 15:06) [49]

А как вы вообще ToolBar таскаете? Стандартный с вкладки Win32 я так и не смог сдвинуть никуда (Delphi 2007).


 
MacroDenS ©   (2009-12-23 15:09) [50]

А как вы вообще ToolBar таскаете?
выставь в инспекторе объекта:
DragKind = dkDock
DragMode = dmAutomatic


 
Ega23 ©   (2009-12-23 15:28) [51]

Что-то мне подсказывает, что нужно вдумчиво это дело просмотреть

procedure TToolBar.WndProc(var Message: TMessage);
var
 Control: TControl;
 CapControl: TControl;
 Msg: TMsg;

 function IsToolButtonMouseMsg(var Message: TWMMouse): Boolean;
 begin
   if GetCapture = Handle then
   begin
     CapControl := GetCaptureControl;
     if (CapControl <> nil) and (CapControl.Parent <> Self) then
       CapControl := nil;
   end
   else
     CapControl := nil;
   Control := ControlAtPos(SmallPointToPoint(Message.Pos), False);
   Result := (Control <> nil) and (Control is TToolButton) and
     not Control.Dragging;
 end;

 procedure SendDropdownMsg(Button: TToolButton);
 var
   Msg: TNMToolBar;
 begin
   FillChar(Msg, SizeOf(Msg), 0);
   with Msg, hdr do
   begin
     hwndFrom := Handle;
     idFrom := Handle;
     code := TBN_DROPDOWN;
     iItem := Button.Index;
   end;
   SendMessage(Handle, WM_NOTIFY, Handle, Longint(@Msg));
 end;

begin
 if not (csDesigning in ComponentState) then
 begin
   case Message.Msg of
     WM_MOUSEMOVE:
       begin
         { Call default wndproc to get buttons to repaint when Flat = True. }
         if IsToolButtonMouseMsg(TWMMouse(Message)) then
         begin
           { Prevent painting of flat buttons when they are dock clients }
           if TControlAccess(Control).DragMode <> dmAutomatic then
             DefaultHandler(Message);
         end
         else
           DefaultHandler(Message);
       end;
     WM_LBUTTONUP:
       { Update button states after a click. }
       if IsToolButtonMouseMsg(TWMMouse(Message)) then
       begin
         DefaultHandler(Message);
         if (CapControl = Control) or (Control is TToolButton) then
         begin
           with TToolButton(Control) do
             if Down and Grouped and AllowAllUp and (Style = tbsCheck) then
               Down := False;
           UpdateButtonStates;
         end
         else if (CapControl is TToolButton) or (TToolButton(Control).Style = tbsDropDown) then
           Exit;
       end;
     WM_LBUTTONDOWN, WM_LBUTTONDBLCLK:
       if IsToolButtonMouseMsg(TWMMouse(Message)) then
       begin
         { Check if mouse is clicked on a drop-down button"s arrow (for IE4+
           the arrow is within 13 pixels from the right, for IE3 there is no
           distinction - the entire button is used).  If an arrow click is
           detected then don"t process this mouse event - a TBN_DROPDOWN
           notification will be created for us by the default wndproc. }
         with TToolButton(Control) do
         begin
           { Allow IsControlMouseMsg to deliver message to button.
             This causes the clicking to happen. }
           if FInMenuLoop and Self.MouseCapture then
             MouseCapture := True;
           { When the style is tbsDropDown, and we have IE4+, we need
             to subtract the drop down button width of 14 pixels, otherwise
             it will cause the drop down menu to "stick" down }
           if (Style <> tbsDropDown) or
              (GetComCtlVersion >= ComCtlVersionIE4) and
              (TWMMouse(Message).XPos < Left + Width - 14) then
             inherited WndProc(Message);
         end;
         if not Control.Dragging then
           DefaultHandler(Message);

         if (TToolButton(Control).Style <> tbsDropDown) and
           ((TToolButton(Control).DropdownMenu <> nil) or
           (TToolButton(Control).MenuItem <> nil)) then
         begin
           try
             SendDropDownMsg(TToolButton(Control));
           finally
             { Here we remove WM_LBUTTONDOWN message sent and instead dispatch
               it as a WM_LBUTTONUP to get a Click fired. }
             Msg.Message := 0;
             if PeekMessage(Msg, Handle, WM_LBUTTONDOWN, WM_LBUTTONDOWN,
               PM_REMOVE) and (Msg.Message = WM_QUIT) then
               PostQuitMessage(Msg.WParam)
             else
             begin
               Message.Msg := WM_LBUTTONUP;
               Dispatch(Message);
             end;
           end;
         end;
         Exit;
       end;
   end
 end;
 inherited WndProc(Message);
end;


и сделать как-то также. В смысле - сообщение послать.


 
chery ©   (2009-12-23 17:32) [52]


> Ega23

посмотрим опробуем, спс(=


 
chery ©   (2009-12-23 17:34) [53]


> посмотри может здесь что полезного найдешь http://www.delphi3000.
> com/articles/article_1010.asp?SK=правда там на инглише

на первый взгляд что то есть, жаль все на англ., а у меня с ним не очень(=


 
chery ©   (2009-12-23 17:37) [54]


> А как вы вообще ToolBar таскаете?

MacroDenS прав просто выбираешь тулбар и в свойствах ставишь DragKind = dkDock


 
chery ©   (2009-12-23 20:47) [55]


> StriderMan ©   (23.12.09 12:16) [41]
> Че-то у меня кончились идеи как программно стащить ToolBar
> в свободное плавание, кроме как сгенерить цепочку сообщений,
>  эмулирующих стаскивание мышью :D

Есть идея:ввести переменную, если он на форме то она единица и координаты из памяти не грузятся. Если нет - то она равна нулю и приходится подгружать координаты из памяти, чтобы определить положение в пространстве экрана.


 
Ega23 ©   (2009-12-23 21:13) [56]


> Есть идея:ввести переменную, если он на форме то она единица
> и координаты из памяти не грузятся. Если нет - то она равна
> нулю и приходится подгружать координаты из памяти, чтобы
> определить положение в пространстве экрана.


Эта переменная у тебя уже есть, называется ToolBar1.Parent


 
Kyn66 ©   (2009-12-23 21:49) [57]


> chery ©   (22.12.09 23:57) [13]
> Вот вариант данной работы  http://depositfiles.com/files/xpc2ma774


А ты круто придумал, исходник для задания вопроса на депозит выкладывать. Сам то понял чего сделал? Или решил что сейчас все ломанутся его оттуда выкачивать? :)


 
chery ©   (2009-12-23 21:50) [58]


> Kyn66

ок скажи мне куда залить.


 
Ega23 ©   (2009-12-23 22:11) [59]


> ок скажи мне куда залить.


А он никому не нужен. Ты уже указал проблему.


 
chery ©   (2009-12-23 22:15) [60]


> А он никому не нужен.

просто подумал что может комуто интересно будет посмотреть программу.


 
Petr V. Abramov ©   (2009-12-23 23:09) [61]


> просто подумал что может комуто интересно будет посмотреть
> программу.

"программы" всем своей хватает, не работает нифига в полнолуние.


 
Ega23 ©   (2009-12-23 23:36) [62]


> просто подумал что может комуто интересно будет посмотреть
> программу.


Всю - увольте-с. это за деньги.
А вот вопрос ты задал интересный. В плане как ToolBar в отдельном окошке вывести. И это уже не за деньги, а за личный интерес. :)


 
Petr V. Abramov ©   (2009-12-23 23:45) [63]


> Ega23 ©   (23.12.09 23:36) [62]


> В плане как ToolBar в отдельном окошке вывести.

вопрос-то был как координаты сохранить, ась? :)


 
Ega23 ©   (2009-12-23 23:54) [64]


> вопрос-то был как координаты сохранить, ась? :)


ты снчала его принудительно в отдельное окно выведи...


 
Ega23 ©   (2009-12-23 23:59) [65]

С координатами-то всё просто:

procedure TForm1.Button3Click(Sender: TObject);
var
 tdf : TToolDockForm;
begin
 if not (tb1.Parent is TToolDockForm) then Exit;
 tdf := TToolDockForm(tb1.Parent);
 Label1.Caption := "left : " + IntToStr(tdf.Left) + "; top : " + IntToStr(tdf.Top);
end;


 
Petr V. Abramov ©   (2009-12-24 00:00) [66]


> Ega23 ©   (23.12.09 23:54) [64]
>
>

э. да. в основную :)


 
Ega23 ©   (2009-12-24 00:26) [67]

Короче - сделал. Автор, с тебя пиво.

procedure TForm1.Button4Click(Sender: TObject);
begin
 tb1.ControlState :=  tb1.ControlState + [csLButtonDown];
 tb1.BeginDrag(True, 5);
 tb1.EndDrag(True);
 TToolDockForm(tb1.Parent).Left := 100;
 TToolDockForm(tb1.Parent).Top := 100;
end;


 
Petr V. Abramov ©   (2009-12-24 00:37) [68]


> Ega23 ©   (24.12.09 00:26) [67]
смотрел  обсуждение. тут явно не пиво, а минимум банька, хрен с ним в Мурманске, но чтоб в Белое Море кунуться и свежей красной рыбкой заесть.
:)


 
Petr V. Abramov ©   (2009-12-24 00:47) [69]


> красной рыбкой заесть.

и чтоб не на базаре купленной, а тута пойманной, фиг c ним, пока мы в бане :)


 
Ega23 ©   (2009-12-24 00:49) [70]

Петрович, щас наступишь.


 
KilkennyCat ©   (2009-12-24 00:54) [71]


> Petr V. Abramov ©   (24.12.09 00:37) [68]

В Баренцево, а не Белое


 
chery ©   (2009-12-24 01:09) [72]


> Короче - сделал. Автор, с тебя пиво.procedure TForm1.Button4Click(Sender:
>  TObject);begin  tb1.ControlState :=  tb1.ControlState +
> [csLButtonDown];  tb1.BeginDrag(True, 5);  tb1.EndDrag(True);
>   TToolDockForm(tb1.Parent).Left := 100;  TToolDockForm(tb1.
> Parent).Top := 100;end;

это круто одна просьба объясни плз мне подоходчивее как долбоюзеру(=


 
Ega23 ©   (2009-12-24 01:17) [73]


> это круто одна просьба объясни плз мне подоходчивее как
> долбоюзеру(=


Имитация Drag"n"Drop с последующим переносом получившейся ToolDocForm в нужное место.

З.Ы. Код небезопасный. Надо ставить все проверки (DragKind = ..., DragMode = ..., if (toolBar.Parent is TToolDocForm)) и т.п. Но это уже тебе в качестве самостоятельного упражнения.
З.З.Ы. А совсем хорошо будет, если ты залезешь в код TToolBar.WndProc и очень внимательно по нему пройдёшься, со всеми inherited вызовами. Но это уже для тебя на пять с плюсом.


 
chery ©   (2009-12-24 01:17) [74]

проблема с программным выводом тула с контрола понятна, но проблема сохранения так и не решилаь(=


 
Ega23 ©   (2009-12-24 01:20) [75]


> проблема с программным выводом тула с контрола понятна,
> но проблема сохранения так и не решилаь(=


Что конкретно непонятно?

Впрочем, полюбому это уже утром, пора баиньки.


 
chery ©   (2009-12-24 01:23) [76]


> пора баиньки

это точно.

> Что конкретно непонятно

да многое, просто задача то стоит сохранение положения а ее разогнали во что-то поистине сложное и глобально-непонятное, но даже решив вопрос глобальный, задача толком с места не сдвинулась, потому как я совершенно непонял как сделать так что бы положение тул бара сохранялось в реестре)=


 
chery ©   (2009-12-24 01:24) [77]

увы наверно я слишком туп )))=


 
chery ©   (2009-12-24 01:31) [78]

ладно всем спокойной ночи


 
MacroDenS ©   (2009-12-24 09:34) [79]

Дабы с выносом Tollbar"а в отдельное окно разобрались (Спасибо Ega23 © )

Вот что тебе нужно для сохранения:

сохраняем 3 значения
1. Left:Integer;
2. Top:Integer;
3. isToolForm:Boolean; флаг ToolBar"а (в окне или нет)

дополнительные переменные:
Buffer:array[0..255] of Char;

Перед сохранением выесняешь в каком состоянии находится ToolBar
GetClassName(ToolBar1.parent.Handle, Buffer, 255);
если String[Buffer]="TToolDockForm" - значит ToolBar в окне
Left:=TToolDockForm(toolbar1.Parent).Left;
Top:=TToolDockForm(toolbar1.Parent).Top;
isToolForm:=True;
если не в окне, то
Left:=Toolbar1.Left;
Top:=Toolbar1.Top;
isToolForm:=false;

При загрузке параметров ориентируйся на флаг isToolForm
если True, то как описал Ega23 ©
только вместо статических значений присваиваешь сохраненные,
если False то просто присваиваешь значения ToolBar1.left/top.
Думаю для написания кода вполне достаточно


 
Kyn66 ©   (2009-12-24 09:40) [80]


> chery ©   (23.12.09 21:50) [58]
> > Kyn66ок скажи мне куда залить.

Обычно, на форуме задается вопрос и здесь же выкладывается чать кода, в котором закралась непонятка.(А про всякие там депозиты с лететбитами забудь)



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2010.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.63 MB
Время: 0.009 c
8-1202845463
Zoom
2008-02-12 22:44
2010.03.14
Audio Stream


2-1263452790
TRSteep
2010-01-14 10:06
2010.03.14
ValueListEditor - как пользоваться


4-1229881658
Пётр
2008-12-21 20:47
2010.03.14
ID процесса по имени exe-шника


15-1261398845
Арсений
2009-12-21 15:34
2010.03.14
Защита ПО


8-1203308588
Человечка ма!
2008-02-18 07:23
2010.03.14
Штриховка объектов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский