Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 33 из 116<  1 ... 30  31  32  33  34  35  36 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Wizard_kuz Нельзя полагаться на их одинаковость.
Берешь какой-нибудь TCustomPanel, переопределяешь события, метод Paint (по желанию) и получаешь свой контрол.
Я вот такое сморганил:
#77

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Rius Прикольно получилось :) Давно хочу сварганить что нибудь по типу Windows желательно с использованием тем от Windows.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Надеюсь поделитесь с людьми. Rius - класс.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Wizard_kuz
Цитата:
как сделать так чтоб стандартное окно формы можно было заменить любой картинкой

Тебе нужно, чтобы форма окна подгонялась под картинку? Тогда ищи в архиве http://www.xakep.ru/ ну например вот и еще посмотри тут может чего найдешь.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
All Выше я приводил картинку, менюшки расположены на потомке TCustomPanel, который закрашивается через GradientFill из msimg32 в переопределенном методе Paint()
Код:
     TRect Rect = TRect(0, 0, Width, Height);
     if(this->Parent != NULL)
     {
        HDC hDC = GetDC(this->Handle);
        GradientRect(hDC, Rect, FGradientVertical, FColorStart, FColorEnd);
        ReleaseDC(this->Handle, hDC);
     }

Проблема в том, что при изменении вертикального размера эта панель мерцает от перерисовки. Тот же самый код, примененный в методе OnPaint формы такого эффекта не вызывает. Установка панели DoubleBuffered=true делает мерцание ещё более заметным.

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Rius Могу помочь в доработке компонента, если конечно ты захочеш поделится им :)


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Ray Adams Вот код мерцающего компонента панели (это то, что на заднем плане):
RPanel.cpp
Код:
//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "RPanel.h"
#pragma package(smart_init)
#include "GradFill.h"
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TRPanel *)
{
        new TRPanel(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRPanel::TRPanel(TComponent* Owner)
        : TCustomPanel(Owner)
{
 FBackGround = new Graphics::TBitmap();
 ControlStyle << csOpaque;
 DoubleBuffered = true;
}
//---------------------------------------------------------------------------
namespace Rpanel
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[1] = {__classid(TRPanel)};
                 RegisterComponents("RComp", classes, 0);
        }
}
//---------------------------------------------------------------------------

void __fastcall TRPanel::SetBackGround(Graphics::TBitmap *value)
{
 FBackGround->Assign(value);
 Invalidate();
// if(value)
// {
//    Canvas->Brush->Style = bsSolid;
//  Canvas->Brush->Bitmap->Assign(FBackGround);
//    Canvas->Brush->Bitmap->Assign(FBackGround);
//  Canvas->FillRect(TRect(0, 0, Width, Height));
// }
}
//---------------------------------------------------------------------------

__fastcall TRPanel::~TRPanel()
{
 delete FBackGround;
}
//---------------------------------------------------------------------------

void __fastcall TRPanel::Paint()
{
/*
// Canvas->Brush->Style = bsSolid;
 if(!FBackGround->Empty)
 {
    Canvas->Brush->Bitmap = FBackGround;
    Canvas->FillRect(TRect(0, 0, Width, Height));
 }
 else
 {
     TRect Rect = TRect(0, 0, Width, Height);
     if(this->Parent != NULL)
     {
        HDC hDC = GetDC(this->Handle);

        GradientRect(hDC, Rect, FGradientVertical, FColorStart, FColorEnd);

//        long int OldMode;
//        OldMode = SetBkMode(hDC, TRANSPARENT);

//        DrawText(hDC, FCaption.c_str(), - 1, &Rect,
//            (FMultiline ? 0 : DT_SINGLELINE) | DT_CENTER | \
//            (FWordWrap ? DT_WORDBREAK : 0) | DT_VCENTER);

//        SetBkMode(hDC, OldMode);
//        if(Focused())
//            DrawFocusRect(hDC, &Rect);

        ReleaseDC(this->Handle, hDC);
     }
//    Canvas->Brush->Color = Color;
//    Canvas->FillRect(TRect(0, 0, Width, Height));
 }
 */
// if(FOnPaint) FOnPaint(this);
}
//---------------------------------------------------------------------------

void __fastcall TRPanel::SetColorStart(TColor value)
{
    if(FColorStart != value) {
        FColorStart = value;
        Invalidate();
    }
}
//---------------------------------------------------------------------------

void __fastcall TRPanel::SetColorEnd(TColor value)
{
    if(FColorEnd != value) {
        FColorEnd = value;
        Invalidate();
    }
}
//---------------------------------------------------------------------------

void __fastcall TRPanel::FSetGradientVertical(bool value)
{
    if(value != FGradientVertical)
    {
        FGradientVertical = value;
        Invalidate();
    }
}
//---------------------------------------------------------------------------
void __fastcall TRPanel::WndProc(TMessage& Message)
{
// if(Message.Msg != WM_PAINT) Inherited::WndProc(Message);
 TControl::WndProc(Message);
 switch(Message.Msg)
 {
  case WM_PAINT: WMPaint(Message); Message.Result = 0; return;
//  case WM_FONTCHANGE: ShowMessage("Font changed"); break;
 }
}
//---------------------------------------------------------------------------

void __fastcall TRPanel::WMPaint(TMessage &Message)
{
// Canvas->Brush->Style = bsSolid;
 if(!FBackGround->Empty)
 {
    Canvas->Brush->Bitmap = FBackGround;
    Canvas->FillRect(TRect(0, 0, Width, Height));
 }
 else
 {
     TRect Rect = TRect(0, 0, Width, Height);
     if(this->Parent != NULL)
     {  //(HDC)Message.WParam;
        HDC hDC;
        if((HDC)Message.WParam == NULL) hDC = GetDC(this->Handle);
        else hDC = (HDC)Message.WParam;
//        if(GetUpdateRect(this->Handle, &Rect, false))
        GradientRect(hDC, Rect, FGradientVertical, FColorStart, FColorEnd);
        ReleaseDC(this->Handle, hDC);
     }
 }
}
//---------------------------------------------------------------------------

RPanel.h
Код:
//---------------------------------------------------------------------------

#ifndef RPanelH
#define RPanelH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
//---------------------------------------------------------------------------
class PACKAGE TRPanel : public TCustomPanel
{
        typedef TCustomPanel Inherited;
private:
        Graphics::TBitmap *FBackGround;
        TColor FColorStart;
        TColor FColorEnd;
        bool FGradientVertical;
        TNotifyEvent FOnPaint;
        void __fastcall SetBackGround(Graphics::TBitmap *value);
        void __fastcall SetColorStart(TColor value);
        void __fastcall SetColorEnd(TColor value);
        void __fastcall FSetGradientVertical(bool value);
        void __fastcall WndProc(TMessage& Msg);
        void __fastcall WMPaint(TMessage &Message);
protected:
public:
        void __fastcall Paint();
        __fastcall TRPanel(TComponent* Owner);
        __fastcall ~TRPanel();
        __property Canvas;
__published:
//        __property TNotifyEvent OnPaint = {read=FOnPaint, write=FOnPaint};
        __property Graphics::TBitmap *BackGround  = { read=FBackGround, write=SetBackGround };
        __property Align;
        __property Anchors;
        __property Alignment;
        __property BevelInner;
        __property BevelOuter;
        __property BevelWidth;
        __property BorderStyle;
        __property BorderWidth;
        __property Color;
        __property Hint;
        __property ShowHint;
        __property TColor GradientStart  = { read=FColorStart, write=SetColorStart };
        __property TColor GradientEnd  = { read=FColorEnd, write=SetColorEnd };
        __property bool GradientVertical  = { read=FGradientVertical, write=FSetGradientVertical, default=true };
//        __property TNotifyEvent OnPaint  = { read=FOnPaint, write=FOnPaint };
};
//---------------------------------------------------------------------------
#endif

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Member
Статус: Не в сети
Регистрация: 27.10.2003
Откуда: Новокузнецк
какие компоненты или библиотеки нужно использовать для скругления формы, чтоб углы были округлыми?


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Wizard_kuz windows xp, или на крайний случай SetWindowRgn:
Код:
 HRGN regn1 = CreateRoundRectRgn(0,0,Width+1,Height+1,5,5);
 if(this->Parent != NULL)
  SetWindowRgn(this->Handle,regn1,true);

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Rius Основная ошибка твоя это то, что ты рисуеш без использования буфера в памяти doublebuffer тебе тут нафиг не нужен.
Создаеш отдельный TBitmap, рисуеш все в нем, а потом уже рисует этот битмап в санвас компонента. И никакого мигания не будет.
Также у компеонента надо обработать сообщение WM_ERASEBKGND и в нем Message.Result := 1; (это паскаль, на си будет также только синтаксис другой). К сожалению у меня нету под рукой Builder'а (стоит только Delphi) так что пока могу помочь только советами.


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Ray Adams Спасибо, сделал так:
Код:
//---------------------------------------------------------------------------
void __fastcall TRPanel::WndProc(TMessage& Message)
{
// if(Message.Msg != WM_PAINT) Inherited::WndProc(Message);
 TControl::WndProc(Message);
 switch(Message.Msg)
 {
//  case WM_PAINT: WMPaint(Message); Message.Result = 0; break;
  case WM_ERASEBKGND: WMPaint(Message); Message.Result = 1; break;
 }
}
//---------------------------------------------------------------------------

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Member
Статус: Не в сети
Регистрация: 14.08.2003
Откуда: Питер
Народ!!! Помогите разобраться.
Положим имеется файл catalog.txt содержимое которого:
Код:
-DVD

--Video
---ANDREA BOCHELLI   “TUSCAN SKIES”. CIELI DI TOSCANA.
---ACE OF BASE.
---ATRIBUTE TO STEVIE RAY VAUGHAN.   1996.

--Soft
---3D РЕДАКТОРЫ.
---Mandrakelinux 10.1. Linux Center Edition.
---SDS, DDK и ИНСТАЛЛЯТОРЫ.

-CD-R

--Films
---11:14.
---11 друзей Оушена.
---13-й район.

--mp3
---Alphaville.
---Gary Moore.
---Rainbow.
---Rammstein (320кбит/сек).

-Games
---ARCANUM. Of Steamworrs & Magick Obscura.2CD.
---СОЛДАТ УДАЧИ.
---UNREAL TOURNAMENT FINAL WORLDS.

И т.п.


Т.о. то, как должен выглядеть TreeView думаю понятно (тип от подтипа отличаются числом минусов). Так вот проблема в том, как правильно и удобно сделать структуру этого файла. Понятно, что можно написать прогу которая тупо преобразует записи в файле в иерархическую структуру TreeView но хотелось бы что-нибудь поинтереснее, т.к. с этим списком надо быстро работать: сортировка, поиск и т.п.
Например, есть такая идея использовать обьекты, типа вот так:
Код:
DVD.Video: TStringList;
DVD.Video[0]:= ‘ANDREA BOCHELLI   “TUSCAN SKIES”. CIELI DI TOSCANA’
……..
DVD.Soft: TStringList;
DVD.Soft[0]:= ‘3D РЕДАКТОРЫ.’;
…….
CD_R.Films: TStringList;
CD_R.Films[0]:= ’11:14’;
…….
Games: TStringList;
Games[0]:= ‘ARCANUM. Of Steamworrs & Magick Obscura.2CD.’;
только как реализовать - ??????
Обратите внимание, что например в типе Games подтипов нет и надо сразу выводить список игр. Но самое главное, что программа это не знает, сколько там у кого подтипов и есть ли они вообще.
Были мысли использовать массивы – но массивы надо как-то задавать. В общем галяк….
Помогите плиз, поделитесь идеями и если можно то набросками по организации структуры для файла.

_________________
Лучшая зашита - это нападение.


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Halfback Попробуй в XML запихать (хотя это наверно из пушки по воробьям). Примеры здесь приводил.
У нодов xml можно получить список дочерних нодов, их количество, т.е. ответ на
Цитата:
самое главное, что программа это не знает, сколько там у кого подтипов и есть ли они вообще.

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Member
Статус: Не в сети
Регистрация: 14.08.2003
Откуда: Питер
Rius
С удовольствием посмотрел бы, но
1. Я пишу в Делфи а не на Билдере
2. Демо файл в архиве скомпилин в Run-Time'е и естественно не запустился. Устанавливать Билдер нет никакого желания.
Да и XML я как то не знаком. Вообще никак. Тем более визуально TreeView мне очень даже подходит.

_________________
Лучшая зашита - это нападение.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Halfback В принципе можно просто рекурсией обойтись :)
Ты только четко сформируй правила или точнее формат файла


 

Member
Статус: Не в сети
Регистрация: 14.08.2003
Откуда: Питер
Ray Adams
Формат файла - обычный текстовик.
Примерное содержание txt файла я приводил выше.
Задача такая:
1. Записать содержимое файла в некоторую структуру (в какую??? - вот в чём вопрос!!!). В обьект или можт по массивам раскидать? ХЗ.
2. Потом работать с этой структурой. т.е. вывести ее на TreeView, организовать поиск в структуре и всякие там сортировки. (Ну это я уж сам как нибудь сделаю).
Т.е. вопрос в том, какую структуру выбрать для моего случая, чтобы работать с ней было бы удобно.
В TreeView это должно выглядеть примерно так:
#77 #77 #77 #77
Думаю из этих скринов понятно что я задумал за программу.
Напрямую из файла в TreeView я сделать могу, но хотелось некоего посредника (т.е. повторюсь, ту самую структуру).

_________________
Лучшая зашита - это нападение.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Текс, ну для начала могу посоветовать использовать базу данных.
Вот тебе скриншот из моей программы CD Collection там как раз собирается вся инфа из CD и отображение идет в виде дерева каталогов слвеа , и соответственно в првой части показываются файлы+каталоги.
#77
Для этого тебе придется разработать систему дерева. Вариантов много, как лучше применить , или точнее какой вариант лучше использовать это тебе решать.
Но текстовыми файлами ты просто замучаешся это я тебе гарантирую. Да искорость не будет выше чем с базой. В моей проге используется ADO компоненты и база .mdb от Access. Никакие лишнии .dll не требуется, все есть в составе Windows.
Для пример сейчас в моей проге записано вот сколько и чего. Статистика также собирается самой прогой.
CD - 71 штук
Папок - 17 673
Файлов - 207 714
общий обьем информации - 89 904,53 Mb.
______
Так что если думаеш о серьезной проги, лучше юзай базу данных.


 

Member
Статус: Не в сети
Регистрация: 04.01.2004
Откуда: Владивосток
вот значит так. есть вопросец. у кого есть идеи как можно исследовать определенные функции, ну скажем надо найти точки пересечения.
как все происходит. немного упрощу. вводиться функция, скажем y=2x*x + 4 и прямая y=x+4.
эти графики пересекутся.
А вот как мне найти это точку(её координаты) пересечения? Тупо циклом перебирать x, подставлять его в одну функцию, а потом подставлять в другую и сравнивать y?? Имхо это слишком натяжно, долго.(т.е работать это все долго будет...а если графика 4 или более??)
Еще можно создать массив(двумерный) и хранить в нем все точки определенной функции. А потом сравнивать массивы. Но здесь тоже не особо быстро получается. Есть ли более быстрые способы(или более правильные), если нет, то какой из этих лучше заюзать.

_________________
*Cofradia Intel* <<<ATI>>>
P4 2.8@3.6/X800Pro/1024Mb/2*160gb WD1600JB/SyncMaster 932в/СВО/Xp SP2 + Asus P525


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
SardoX У меня с математикой туго, но могу предположить, что должна быть формула для такого расчета.


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
Метод покоординатного спуска подойдет?

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 33 из 116<  1 ... 30  31  32  33  34  35  36 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan