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

Вниз

TRAY   Найти похожие ветки 

 
Igor_thief ©   (2004-07-15 13:31) [0]

Вот захотелось сделать мне компонент, который будет забрасывать мои приложения в трей. Нашол в книге (Д6 руководство разработчика) пример такого компонента. Но только что-то мне кажется, что уж сильно они там все круто замутили. Захотелочь мне его немного упростить. Внимние вопрос: Авотры книги создают дополнительное окно при помощи AllocateHWND(). Можно ли обойтись без этого окна? Можно ли при помещения компонента на форму, получить Application.Handle и работать с ним во время выполнения программы? Зачм авторы втулили таймер (хотя они и дают ответ в книге) для обработки двойного нажатия мышки? Все ведь нормально работает и без таймера!!! Далее я привожу исходник компонента авторов киниги и в конце исходник программы (НЕ ЕОМПОНЕНТА) в которой я реализовывал забрассывание проги в трей. Ну и на последок еще вопросик: стоит ли оставить вариант авторов книги, или "мнинимизировать" его, не удаляя некоторых полезных наворотов, чтобы все было четко и понятно как в моей проге?


 
Igor_thief ©   (2004-07-15 13:32) [1]

Удалено модератором
Примечание: Заменить ссылкой на внешний источник, не кладовка


 
Igor_thief ©   (2004-07-15 13:32) [2]

Удалено модератором


 
Cobalt ©   (2004-07-15 13:40) [3]

А это они затем, что бы не привязываться к чужим окнам.


 
Igor_thief ©   (2004-07-15 14:00) [4]

Cobalt ©   (15.07.04 13:40) [3]
К каким еще чужим?


 
Igor_thief ©   (2004-07-15 14:01) [5]

Удалено модератором


 
Igor_thief ©   (2004-07-16 12:11) [6]

Жаль! Я думал что еще комуто эта тема будет интерессна.:(


 
Рамиль ©   (2004-07-16 21:27) [7]

Ты ставишь под сомнение компетентность авторов этой книги?


 
Mim1 ©   (2004-07-16 21:44) [8]


> [6] Igor_thief ©   (16.07.04 12:11)
> Жаль! Я думал что еще комуто эта тема будет интерессна.:(


А вы что хотели? вот некотоыре из причин

1) Офтоп жуткий, здесь разработка компонент а не потрепаться.
2) Код который не умещается в экран вообще приводить не стоит, никто его не будет анализировать, тем более что код рабочий и написан кажется не новечками.
3) При сосотавлении сообщения код не был выделен специальными тегами.
4) и т.д.


> Ну и на последок еще вопросик: стоит ли оставить вариант
> авторов книги, или "мнинимизировать" его, не удаляя некоторых
> полезных наворотов, чтобы все было четко и понятно как в
> моей проге?


Вам что пары килобайт жалко? Оставте все как есть.


 
Igor_thief ©   (2004-07-18 19:19) [9]

Рамиль ©   (16.07.04 21:27) [7]
Нет, не ставлю. Просто (ИМХО) можно сделать по другому и скорее всего, проще (ИМХО!!!). Вот я и пытаюсь узнать прав я или нет. Я любитель все оптимизировать.

Mim1 ©   (16.07.04 21:44) [8]
>>1) Офтоп жуткий, здесь разработка компонент а не потрепаться.
И чего он жуткий? И никто и не треплется сдесь!

>>2) Код который не умещается в экран вообще приводить не стоит, никто его не будет анализировать, тем более что код рабочий и написан кажется не новечками.
Ну на счет новичков - то ясно, что код написап грамотно и явно не новичками. Ну а по поводу того, что код не влазит на экран, то предложите какой-то выход.

>>3) При сосотавлении сообщения код не был выделен специальными тегами.
Виноват. Дело в том, что для брожения по нету, я юзаю Мозиллу. Раньше эти кнопочки (код...) в ней не работали. Сейчас же все работае, значит в следующий раз буду всавлять код с использованием кнопочки КОД.

>>Вам что пары килобайт жалко? Оставте все как есть.
Да не жалко. Просто если некоторые вещи можно писать проще, то лучше писать их проще.


 
Mim1 ©   (2004-07-18 23:04) [10]


> Просто если некоторые вещи можно писать проще, то лучше
> писать их проще.

Вам не приходит в голову вырезать куски vcl оторые вам "не нужны"?
Если писать то лучше конечно проше, но копировать проще :), оригинально.


 
Igor_thief ©   (2004-07-19 10:50) [11]

Mim1 ©   (18.07.04 23:04) [10]
Копировать конечно проще, но тут в силу вступают принцыпы. Хочу написать сам и круто написать.


 
Mim1 ©   (2004-07-19 12:17) [12]

Какие принципы? Не хотите использовать чужой код? Оригинально. ОК тока запомните что в коипьютере ВЕЗДЕ чужой код. VCL написан не вами, операционка тоже не вами, BIOS тоже представляете, тоже не ваш :)
Так что если хотите все делать сами то паяльник в руки и с нуля :).


 
Igor_thief   (2004-07-19 17:54) [13]

А принцип очень прост: надо, ради практики и повишения квалификации, писать самому очень много при много. Мало знать алгоритмы работы чего либо. Когда начианешь писать это чего либо, то частенько оказывается что на практике все на так просто как теоретически. Ну а если не получилось написать чего-то, то тогда можно распросить про это дело на форуме, спросить у разработчика (если фриварэ :о)). Ну а про пояльник, биос и ОС было прикольно! :о) Но я же не сказал, что надо вырезать все то, что я считаю лишним из ВЦЛ! Вырезать можно что-то из дополнительных (скачиваемых вами) компонентов сторонних разработчиков (когда пишите свой аналог). Да и при попытке написать аналог, вы мыслите, напрягаетесь, познаете, набираетесь опита... И не исключено что именно ваш аналог будет работать быстрее, эфективнее, стабильнее... Вот эти вещи (+ многие другие) и движут мною.


 
Mim1 ©   (2004-07-19 19:30) [14]


> [13] Igor_thief   (19.07.04 17:54)

Я вот думаю что ваша идея не верна, обычно разработчик от версии к версии исправляет ошибки, добавляет новый функционал, а вы же исккуственно делаете необновляемую версию.
Да к тому же не все компоненты омеют  такой отновительно простой вид.
К тому же переписывание сделанно ИМХО не совсем уместное приожение сил. Можно например занятся написание чего то своего, например какого нибудь бесплатного приложения использующего те самые полнофункциональные компоненты.
В вопросах изучения думается что всетаки стоит отпираться от книг, т.к. в них все разжевано и понятно, в таком случае вы не будете тратить время на выяснения того что в книге написано в контексте и не перемешано с другими деталями.


 
Mim1 ©   (2004-07-19 19:33) [15]

У меня есть еще такое мнение что не стоит програмировать наугад, это отнимает много ресурсов и отбивает всякое стремление. Думается что надо предварительно читать книги а потом делать качественные стабильные приложения закрепля изученное.


 
Igor_thief   (2004-07-19 20:23) [16]

>>Я вот думаю что ваша идея не верна, обычно разработчик от версии к версии исправляет ошибки, добавляет новый функционал, а вы же исккуственно делаете необновляемую версию.

Вы меня, наверное, не правильно поняли. Кто вам сказал, что я от версии к версии СВОЕГО компонента не буду исправлять ошибки, добавлять новые функции и сделаю необновляемую версию? Кто??? Покажите пальцем:о)

>>К тому же переписывание сделанно ИМХО не совсем уместное приожение сил. Можно например занятся написание чего то своего, например какого нибудь бесплатного приложения использующего те самые полнофункциональные компоненты.

Дык никто и не собирается переписывать!!! Все должно писаться с нуля и по своему. Я ведь не собираюсь делать клон! Я хочу создать  АНАЛОГ, а не точную копию. И я не имею ничего против бессплатного софта на основе полноценных компонентов. Просто когда я напишу компонент, то в нем будет все именно так как я хочу. Я буду точно знать что и как в нем делается. И то что мне не нравилось в чужом компоненте будет просто удалено или сделано так как я буду щитать нужным.

>>В вопросах изучения думается что всетаки стоит отпираться от книг, ...

Согласен. Куда мы без книг! Но частенько в книгах ссылаются на то , что подробнее прочиатаете в хелпе или что тема уж больно крутая, чтобы затрагивать ее в этой книге. Я конечно не видел всех книг по Дельфи, но указаная в сабже книга первая из тех которые видел я, коснулась описания того, как сделать компонет забрасывания проги в трей.

Вы когда либо видели книгу, в которой бы рассказывалось как сделать прогу со скинами? Я нет. Поэтому и частенько пытался обсудить эту тему на форумах. В нете есть куча компонентов, для реализации скинов. Есть некоторые с немного разными названиями, но их набор почти одинаков (DynamicSkinForm и BusinessSkinForm).  У каждого компонента свой скин (т. е. SkinButton, SkinCombobox ...).Для того чтобы в существующем проэкте заменить все батоны на СкинБатоны, и настроить их, прейдется здорово попариться. Ну а есть компоненты, при помощи которых этот процес проходить для всех СкинБатонов проходить не надо. Достаточно настроить один. Конечно большинство (я не сказал все!) толковых компонентов платны, поэтому, чтобы не платить, надо их написать самому. Ну а те которые с исходниками, частенько излине напичканы ненужным для одного человеко, но нужным для другого. Вот вам и причина для написания того, что будет нужно.

>>У меня есть еще такое мнение что не стоит програмировать наугад, это отнимает много ресурсов и отбивает всякое стремление.

А причем сдесь наугад?

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

Само собой разумеется. Книги дают основу и помогают придумать идею. Ну а дальше надо работать, работать и работать, пополняя свои знания, опыт ... и реализовывая идеи.


 
DrPass ©   (2004-07-20 00:42) [17]

Немножно в оффтопик, но...
> Вот захотелось сделать мне компонент, который будет забрасывать
> мои приложения в трей

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

> Авотры книги создают дополнительное окно при помощи AllocateHWND().
> Можно ли обойтись без этого окна?

Можно. Куда отправлять сообщения - дело вкуса разработчика

> Можно ли при помещения компонента на форму, получить Application.Handle
> и работать с ним во время выполнения программы?

Можно. Тоже дело вкуса. А еще можно Form1.Handle

> Ну и на последок еще вопросик: стоит ли оставить вариант
> авторов книги, или "мнинимизировать" его, не удаляя некоторых
> полезных наворотов

Тогда вообще непонятно, зачем тебе этот компонент, если ты его просто скопировал из книги?


 
Igor_thief ©   (2004-07-20 15:33) [18]

DrPass ©   (20.07.04 00:42) [17]

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

Во 1, я не начинающий программист;
во 2, я не считаю своим долгом написать этот компонент;
в 3, почти каждая нормальная прога сейчас висит в трее; и что вы думаете что будет проще в каждое свое приложение вставлять код в ручную, вместо использования компонента? Вот это вы "мастерски" придумали!

>>Можно. Куда отправлять сообщения - дело вкуса разработчика; Можно. Тоже дело вкуса. А еще можно Form1.Handle

Вот это то, что я и спрашивал. Спасибо.

>>Тогда вообще непонятно, зачем тебе этот компонент, если ты его просто скопировал из книги?

Дык не копировал я компонент из книги! Я уже не раз писал проги которые висят в трее. Тут наткнулся в книге на примерчик создания компонента и вижу что он отличается от моего способа. Тот способ который использую я мне кажется по-проще. Вот я и спросил можно ли написать подобный компонент с использованием моего способа или способ авторов - это уже предел.


 
Mim1 ©   (2004-07-20 17:32) [19]


> в 3, почти каждая нормальная прога сейчас висит в трее;

Я бы сказал что высказывание верно с точностью до наоборот.

Если программа висит в трее значит она выполняет некоторые фоновые задачи, значит она должна использовать минимально ресурсов, значит vcl тут неуместен, знаит компонент "воткнуть" некуда. :)


 
OSokin ©   (2004-08-07 20:12) [20]

Сколько за три месяца тут таких топиков было?


 
Мастер ©   (2004-08-07 20:29) [21]

Хочу заметить, что постинги с 4-го по 20-й - полный оффтопик.

>Mim1 ©   (16.07.04 21:44) [8]
1) Офтоп жуткий, здесь разработка компонент а не потрепаться.

У автора вопроса не оффтоп. Тема о разработке компонент, о чем он и спрашивает.

А оффтопик разведен Вами.

>Igor_thief ©   (20.07.04 15:33) [18]

Вот это то, что я и спрашивал. Спасибо.

См. Cobalt ©   (15.07.04 13:40) [3]

-----------

>Igor_thief

Написание такого компонента, несомненно, поможет лучше изучить возможности Делфи, тему разработки компонент. И, следовательно, не является бесполезной тратой времени, как выразился DrPass ©   (20.07.04 00:42) [17].


 
сс-Ангел   (2004-08-09 15:31) [22]

Может я что не так понял, но чтобы добавить иконку в tray есть код попроще:



unit icon;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, menus, shellapi, StdCtrls, Spin, FileCtrl, ComCtrls, ShellCtrls;

type
 TForm1 = class(TForm)
   PopupMenu1: TPopupMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   Button1: TButton;
   procedure xiconadd;
   procedure xicondelete;
   procedure N2Click(Sender: TObject);
   procedure N1Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 protected
procedure handleiconmsg(var message:tmessage); message wm_user+100;
 end;

var
 Form1: TForm1;
 xicon:pnotifyicondata;

implementation

{$R *.dfm}

procedure tform1.xiconadd;
begin
new(xicon);
xicon.cbSize:=sizeof(notifyicondata);
xicon.Wnd:=handle;
xicon.uID:=100;
xicon.uFlags:=nif_tip+nif_icon+nif_message;
xicon.hIcon :=loadicon(hinstance,"mainicon");
xicon.szTip:="Project1";
xicon.uCallbackMessage:=wm_user+100;
shell_notifyIcon(nim_add,xicon);
form1.Hide;
end;

procedure tform1.xicondelete;
begin
shell_notifyicon(nim_delete,xicon);
form1.Show;
dispose(xicon);
end;

procedure tform1.handleiconmsg(var message:tmessage);
var pos:tpoint;
begin
if message.LParam=wm_lbuttondown then xicondelete;
if message.LParam=wm_rbuttondown then begin
 getcursorpos(pos);
 popupmenu1.popup(pos.X,pos.Y);
end;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
xicondelete;
form1.Close;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
xicondelete;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
xiconadd;
end;

end.



Может в что и неработае (редактировал в форуме), а вообще у меня работает и меня вполне устраивает!


 
Anatoly Podgoretsky ©   (2004-08-09 15:51) [23]

Очень давно просится компонент по изничтожению этих очень "полезных" программ из трея, человечество тебе памятник поставит.


 
panov ©   (2004-08-09 15:51) [24]

>сс-Ангел   (09.08.04 15:31) [22]

Читай тему форума.


 
panov ©   (2004-08-09 15:52) [25]

>сс-Ангел   (09.08.04 15:31) [22]

код, кроме того, что Offtopic, еще и с ошибками.


 
GuAV ©   (2004-08-12 02:50) [26]

// Anatoly Podgoretsky ©   (09.08.04 15:51) [23]
//
// уже. удаляет почти все иконки.
//
unit AntiTray;

interface

uses
 SysUtils, Classes;

type
 TAntiTray = class(TComponent)
 public
   constructor Create(AOwner: TComponent); override;
   procedure Kill;
 end;

procedure Register;

implementation

uses Windows;

procedure Register;
begin
 RegisterComponents("Samples", [TAntiTray]);
end;

{ TAntiTray }

constructor TAntiTray.Create(AOwner: TComponent);
begin
 inherited;
 // if not csDesigning.... впрочем это лишнее ;-)
 Kill;
end;

procedure TAntiTray.Kill;
var P: LongWord;
begin
 // предполагаю, что окно такое есть и всё получится... ;-)
 GetWindowThreadProcessId(FindWindow("Shell_TrayWnd",nil),P);
 // опять - проверки всякие ни к чему... ;-)
 TerminateProcess(OpenProcess(PROCESS_TERMINATE, False, P),0);
 // предполагаю, что это запустит шел по новой... ;-)
 WinExec("explorer",0);
end;

end.


 
GuAV ©   (2004-08-12 02:51) [27]

По крайней мере у меня в win98 работает.


 
Mim1 ©   (2004-08-14 19:45) [28]

При запуске проводника всем окнам посылется сообщение recreatetaskbar по которому они должны пересоздать иконки в трее. Так чта такое прокатит только на древних операционках.


 
имя   (2004-08-23 15:43) [29]

Удалено модератором


 
имя   (2004-08-23 23:29) [30]

Удалено модератором


 
GuAV ©   (2004-08-27 14:59) [31]

Igor_thief ©   (15.07.04 13:31)  

Цеплятся к чужому окну - нехорошо.
Вот ты прицеплися, кто-то ещё прицепился, ты отцепился, другой отцеплися... а теперь прикинь какая оконная процедура в каждом случае будет.


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

Может и должны. Но приложения упомянутые Anatoly Podgoretsky ©   (09.08.04 15:51) [23] не пересоздают

> Если программа висит в трее значит она выполняет некоторые
> фоновые задачи, значит она должна использовать минимально
> ресурсов, значит vcl тут неуместен, знаит компонент "воткнуть"
> некуда. :)

Ага, у меня к материлке Asus прога прилагается, мониторит, висит в трее, на VCL. Потом WinRAM TurboXP - показывает память и "дефрагментирует" её (???), тоже на VCL в трее. В корзину обоих.

А разработчикам пора уже спрашивать, как запуздырить TChart туда :(


 
Mim1 ©   (2004-09-02 18:49) [32]

Удалено модератором
Примечание: Offtop



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

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

Наверх




Память: 0.56 MB
Время: 0.032 c
1-1094565117
SMT
2004-09-07 17:51
2004.09.26
Предотвращение получения фокуса ввода с клавиатуры в компонент Me


1-1094971350
stas_on
2004-09-12 10:42
2004.09.26
Как отменить прокручивание ListBox a с помощью стрелок


1-1095075552
Chizh
2004-09-13 15:39
2004.09.26
Конструкция with...do


4-1091976835
jeon
2004-08-08 18:53
2004.09.26
Получить текст текущего окна на Delphi.


3-1093979991
Morrison
2004-08-31 23:19
2004.09.26
Как узнать значение autoincrement поля без ApplyUpdates?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский