Страница 21 из 35

Добавлено: 10.02.2008 12:35:30
B4rr4cuda
Alex2000
Может добавить в TFrameFilePanel.dgPanelMouseDown
эту "if Button<>mbLeft then Exit;" строчку?
Иначе, контекстное меню по правой, не пашет.

Добавлено: 10.02.2008 13:13:15
Alexx2000
Добавил, странно почему не срабатывает :?:

Добавлено: 10.02.2008 13:37:08
B4rr4cuda
Что не срабатывает?
Это -> "if Button<>mbLeft then Exit;" ?
У меня оно срабатывает.

Добавлено: 10.02.2008 14:24:31
Alexx2000
Не, я имею в виду почему без этого не срабатывает, OnMouseUp не вызывается что ли.

Добавлено: 10.02.2008 17:10:58
B4rr4cuda
Насколько я вижу, ручного OnMouseUp не объявлено вообще, а в OnMouseDown , незавиcимо от нажатой кнопки мыши, начинается драг и соответственно меню не вызывается. Все логично.

Добавлено: 10.02.2008 17:20:38
Alexx2000
B4rr4cuda писал(а):Насколько я вижу, ручного OnMouseUp не объявлено вообще

Он присваивается в fMain, из него и происходит вызов меню.
Хотя у меня есть одна идея почему не работает, надо проверить.

Добавлено: 10.02.2008 17:51:08
B4rr4cuda
н присваивается в fMain, из него и происходит вызов меню.
Хотя у меня есть одна идея почему не работает, надо проверить.

Тогда я без понятия почему так происходит.
Кстати замени пожалуйста код в ucolumns.pas:

Код: Выделить всё

procedure TPanelColumnsClass.Load(FileName:string);
var Ini:TIniFile;
begin
  try
    Ini:=TIniFile.Create(FileName);
    Load(Ini);
  finally
    Ini.Free;
  end;

Я ступил, сдублировал код. И аналогично:

Код: Выделить всё

procedure TPanelColumnsClass.Save(FileName: string);
 var Ini:TIniFile;
begin
  try
    Ini:=TIniFile.Create(FileName);
     Save(Ini);
  finally
    Ini.Free;
  end;
end;

Добавлено: 10.02.2008 23:48:56
B4rr4cuda
Я тут задумался над wlx для DC. Основа Тоталовского wlx апи - передача хэндла окна листера, а там уж делай с ним, что хочешь. Насколько показали мои поиски, аналога windows.SetParent() в лазаре нет. В Xlib или X модуле есть функция ReparentWindow, возможно она подойдет. Но в этом случае, реализация плагина в линуксе будет на лысом X11. Никаких вкусностей типа lcl, форм и прочего. Хотя, я думаю, можно извратиться...
Если есть варианты - подскажите плиз. :!:
И какие вообще планы и мысли по поводу WLX:?:

Добавлено: 11.02.2008 09:54:24
Alexx2000
Я недавно тоже немного копался в доках по Х, правда по поводу того как сделать терминал.
Даже если XReparentWindow(display, w, parent, x, y) подойдет, то как получить parent, т.е. окно просмоторщика?

И какие вообще планы и мысли по поводу WLX:?:

Собственно из-за этого, и не понятно как лучше сделать.

Добавлено: 11.02.2008 13:11:28
B4rr4cuda
Я недавно тоже немного копался в доках по Х, правда по поводу того как сделать терминал.

Я тоже рыскал по поводу терминала, вот что надумал - берем компонент CmdLine дорабатываем маленько для собственного удобства. Здесь же на форуме выложен класс TExProcess дорабатываем и его. Обьединяем и получаем почти готовую консоль, "все уже написано до нас".

Даже если XReparentWindow(display, w, parent, x, y) подойдет, то как получить parent, т.е. окно просмоторщика?

Из плагина? Очень просто. Просмотрщик сам его передает плагину в функции ListLoad(ParentWin:HWND; FileToLoad:string; ShowFlags:integer):HWND;
Если рисовать чистым x11, то можно придерживаться тоталовского апи, проблем быть не должно. Кстати, вот тот самый случай, когда пригодиться расширенное апи.
Я еще покопаюсь в этом вопросе, может чего-то нарою.

Добавлено: 11.02.2008 23:26:14
Alexx2000
B4rr4cuda писал(а):
Я недавно тоже немного копался в доках по Х, правда по поводу того как сделать терминал.

Я тоже рыскал по поводу терминала, вот что надумал - берем компонент CmdLine дорабатываем маленько для собственного удобства.

Э не понял, что за компонент CmdLine.
Ну остальное ясно, т.е. просто будем перехватывать вывод программ.

Из плагина? Очень просто. Просмотрщик сам его передает плагину в функции ListLoad(ParentWin:HWND; FileToLoad:string; ShowFlags:integer):HWND;

Не, как просмоторщик узнает, так сказать Handle своего окна, чтобы передать плагину?

Добавлено: 12.02.2008 01:20:18
B4rr4cuda
Э не понял, что за компонент CmdLine.

Этот
Не, как просмоторщик узнает, так сказать Handle своего окна, чтобы передать плагину?

:shock:
Form1.handle или panel1.handle или ещё какой нить хандле. Viewer1.handle например.

Добавлено: 12.02.2008 09:18:08
Alexx2000
B4rr4cuda писал(а):
Э не понял, что за компонент CmdLine.

Этот

Посмотрим...
Не, как просмоторщик узнает, так сказать Handle своего окна, чтобы передать плагину?

:shock:
Form1.handle или panel1.handle или ещё какой нить хандле. Viewer1.handle например.

:D Просто на Лазарус вики, вот здесь Прочитал нижеследующее:
Every TWinControl has a Handle, and the LCL does not need to know, what a Handle is. The meaning of the Handle is totally up to the interface:

* under gtk a Handle is often a PGtkWidget
* under windows a Handle is often a HWnd.
* under Carbon a Handle is often a object descendant of TCarbonWidget.
* under Qt, a Handle is often a pointer to a object descendent of TQtWidget.

Или к формам это не относится?

Добавлено: 12.02.2008 13:37:31
B4rr4cuda
Или к формам это не относится?

Относится, но это не имеет значения, хэндл то существует и указывает на обьект . Хотя хз как к этому XReparent отнесется... Теперь я понял что ты имел ввиду. :(
Все не так просто, но выход есть:
поиск по документации qt показал, что функция SetParent наличествует

Код: Выделить всё

   void Receiver::setParent( QDialog *parent )

также есть фунца reparent

Код: Выделить всё

void QWidget::reparent ( QWidget * parent, WFlags f, const QPoint & p, bool showIt = FALSE ) [virtual] 
 Reparents the widget. The widget gets a new parent, new widget flags (f, but as usual, use 0) at a new position in its new parent (p).


Для GTK аналог тоже есть:

Код: Выделить всё

gtk_widget_reparent ()
void        gtk_widget_reparent             (GtkWidget *widget,
                                             GtkWidget *new_parent);
 Moves a widget from one GtkContainer to another, handling reference count issues to avoid destroying the widget.
widget :   a GtkWidget
  new_parent :   a GtkContainer to move the widget into

Так что проблемы нет, просто нужен модуль с обертками этих фунц (которые скорее всего наличествуют в лазаре) и подключать их к плагу либо просто доки хорошие составить.
Проблема или неудобство, кому как, в том что если DC скомпилен под qt, то плагин скомпиленный под гтк ему не подойдет, ему нужен плаг скомпиленый под qt.
А хэндлы как ты мог заметить, как раз нужного типа. :)

Добавлено: 18.02.2008 04:38:54
B4rr4cuda
в svn, 211 ревизии в модуле fFileAssoc наличествует включение {$I ffileassoc.lrs}, а самого файла нет.