⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeviewmain.cpp

📁 著名的基因芯片表达数据聚类软件。esein编写
💻 CPP
📖 第 1 页 / 共 4 页
字号:

    ArrayLabelImage->Canvas->Font->Handle = CreateFontIndirect (&lf);

    for (j=0;j<Cluster->Columns;j++)
    {
        ArrayLabelImage->Canvas->TextOut((j*ZoomImageScaleX), ArrayLabelImage->Height, Cluster->Arrays->Strings[j]);
    }
}

void __fastcall TTreeViewMainForm::MakeArrayTree()
{
    if (Cluster->TopArrayNode != NULL)
    {

        ArrayTreeSplitter->Visible = true;
        if (ArrayTreePanel->Height == 0)
        {
            ArrayTreePanel->Height = 100;
            ArrayTreeImage->Height = 0;
        }

        ArrayTreeImage->Canvas->Brush->Style = bsSolid;
        ArrayTreeImage->Canvas->Brush->Color = clWhite;
        ArrayTreeImage->Canvas->FillRect(ArrayTreeImage->ClientRect);

        Cluster->TopArrayNode->Draw(ArrayTreeImage, ZoomImageScaleX);

    }
    else
    {
        ArrayTreeSplitter->Visible = false;
        ArrayTreePanel->Height = 0;
        ArrayTreeImage->Height = 0;
    }
}

//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::Splitter2Moved(TObject *Sender)
{
    Redo();
}

void __fastcall TTreeViewMainForm::Redo()
{

    //OverviewPanel->Width    = OverviewScrollBox->ClientWidth;
    OverviewPanel->Height   = SmallGeneImage->Height;
    CentralPanel->Width = Cluster->Columns * ZoomImageScaleX;

    if (Cluster->TopNode != NULL)
    {
        //SmallGeneImage->Left    = max(100,OverviewScrollBox->ClientWidth - SmallGeneImage->Width - 1);
        SmallGeneImage->Left    = max(50,SmallGeneImage->Left);
        OverviewPanel->Width    = max(SmallGeneImage->Left + SmallGeneImage->Width,
            OverviewScrollBox->ClientWidth);
        TreeImage->Width        = SmallGeneImage->Left;
        TreeImage->Height       = SmallGeneImage->Height;
        TreeImage->Picture->Bitmap->Width  = TreeImage->Width;
        TreeImage->Picture->Bitmap->Height = SmallGeneImage->Height;
    }
    else
    {
        TreeImage->Width = 0;
        OverviewScrollBox->ClientWidth = SmallGeneImage->Width;
        OverviewPanel->Width = max(SmallGeneImage->Width,OverviewScrollBox->ClientWidth);
        SmallGeneImage->Left = 0;
    }


    TreeImage->Canvas->FillRect(TreeImage->ClientRect);
//    SmallGeneImage->Left    = TreeImage->Width;

    if (Cluster->Loaded)
    {

        if (Cluster->TopArrayNode != NULL)
        {
            Cluster->TopArrayNode->SetCoor();
        }

        TreeImage->Canvas->Pen->Color = clBlack;

        if (Cluster->TopNode != NULL)
        {
            Cluster->TopNode->SetCoor();
            Cluster->TopNode->Draw(TreeImage, ImageScaleY);
        }

        MakeArrayTree();
        MakeArrayLabels();

        ZoomBoxShape->Left    = SmallGeneImage->Left;
        ZoomBoxShape->Width   = SmallGeneImage->Width;
        ZoomBoxShape->Top     = (ImageScaleY * Cluster->MinCoor) - 2;
        ZoomBoxShape->Height  = (ImageScaleY * (Cluster->MaxCoor - Cluster->MinCoor + 1)) + 4;

        // Highlight selected node

        if (Cluster->BestNode != NULL)
        {
            TreeImage->Canvas->Pen->Color = clFuchsia;
            Cluster->BestNode->Draw(TreeImage, ImageScaleY);
        }
    }

}

void __fastcall TTreeViewMainForm::Reset()
{
    OverviewPanel->Height = ImageScaleY * Cluster->Genes->Count;
    Cluster->MakeThumbnail(SmallGeneImage,ImageScaleX,ImageScaleY,ImageContrast,MaskVal,
        PositiveColor,ZeroColor,NegativeColor,MissingColor);
    Redo();
}


//---------------------------------------------------------------------------



void __fastcall TTreeViewMainForm::Splitter1Moved(TObject *Sender)
{
//    OverviewPanel->Width = OverviewScrollBox->ClientWidth;
//    SmallGeneImage->Left  = max(50,OverviewScrollBox->ClientWidth - SmallGeneImage->Width -1);
    Redo();
}
//---------------------------------------------------------------------------



void __fastcall TTreeViewMainForm::Load1Click(TObject *Sender)
{
     int i;

    if (OpenDialog1->Execute())
    {

        for (i=0;i<ControlCount;i++)
        {
            if (Controls[i]->Width == 0)
            {
               Controls[i]->Width = 25;
            }

            if (Controls[i]->Width == 0)
            {
               Controls[i]->Height = 25;
            }
        }


        char Drive[3];
        char Dir[260];
        fnsplit(OpenDialog1->FileName.c_str(),Drive,Dir,NULL,NULL);
        OpenDialog1->InitialDir = AnsiString(Drive) + AnsiString(Dir);

        //Loading->Show();
        //TCursor SaveCursor = Screen->Cursor;
        Application->Minimize();
        Application->ProcessMessages();
        //Screen->Cursor = crHourGlass;
        if (Cluster != NULL)
        {
            delete Cluster;
            Cluster = new TGeneCluster();
        }
        else
        {
            Cluster = new TGeneCluster();
        }

        try
        {
            ImageContrast = 2 * Cluster->Load(OpenDialog1->FileName);
            OptionsForm->ImageContrastEdit->Text = ImageContrast;
            OverviewPanel->Height = ImageScaleY * Cluster->Genes->Count;
            Cluster->MakeThumbnail(SmallGeneImage,ImageScaleX,ImageScaleY,ImageContrast,MaskVal,
                PositiveColor,ZeroColor,NegativeColor,MissingColor);
            Redo();
            //Screen->Cursor = SaveCursor;
            //Loading->Close();
        }
        catch (Exception &E)
        {
        }
        Application->Restore();
    }
}
//---------------------------------------------------------------------------


void __fastcall TTreeViewMainForm::Options1Click(TObject *Sender)
{
    OptionsForm->ShowModal();
    SmallGeneImage->Width  = Cluster->Columns * ImageScaleX;
    SmallGeneImage->Height = Cluster->Rows    * ImageScaleY;
    Redo();
}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::SmallGeneImageMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    Dragging = true;
    DragRect.Top = Y;
    DragRect.Bottom = Y;

    ZoomBoxShape->Top = DragRect.Top - 2;
    ZoomBoxShape->Height = DragRect.Bottom - DragRect.Top + 4;

}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::SmallGeneImageMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
    if (Dragging)
    {
        DragRect.Bottom = Y;
        ZoomBoxShape->Height = DragRect.Bottom - DragRect.Top + 4;
    }
}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::SmallGeneImageMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if (Dragging)
    {
        DragRect.Bottom = Y;
        if (DragRect.Bottom < DragRect.Top)
        {
           int Hold = DragRect.Top;
           DragRect.Top = DragRect.Bottom;
           DragRect.Bottom = Hold;
        }
        if (DragRect.Right < DragRect.Left)
        {
           int Hold = DragRect.Left;
           DragRect.Left = DragRect.Right;
           DragRect.Right = Hold;
        }

        DragRect.Top = max((int)DragRect.Top,0);

        ZoomBoxShape->Height = DragRect.Bottom - DragRect.Top + 4;
        Dragging = false;
    }

    if (Cluster->BestNode != NULL)
    {
        TreeImage->Canvas->Pen->Color = clBlack;
        Cluster->BestNode->Draw(TreeImage, ImageScaleY);
    }

    Cluster->Include(DragRect.Top/ImageScaleY, min(Cluster->Rows-1,(int)(DragRect.Bottom/ImageScaleY)));

    MakeZoom();

}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if ( (Key > 36) && (Key <41) )
    {
        ResetNode();
        switch (Key)
        {
            case 37:
                if (Cluster->BestNode->IsNode)
                {
                    Cluster->BestNode = Cluster->BestNode->Child1;
                    MakeZoom();
                }
                break;
            case 38:
                if (Cluster->BestNode != Cluster->TopNode)
                {
                    Cluster->BestNode = Cluster->BestNode->Parent;
                    MakeZoom();
                }
                break;
            case 39:
                if (Cluster->BestNode->IsNode)
                {
                    Cluster->BestNode = Cluster->BestNode->Child2;
                    MakeZoom();
                }
                break;
            case 40:
                while (Cluster->BestNode->Corr > CorrSelectCutoff)
                {
                    Cluster->BestNode = Cluster->BestNode->Parent;
                }
                MakeZoom();
                break;
            default:
            break;
        }
    }

    if (Key == VkKeyScan('n'))
    {
       //NoteForm->Show();
    }

}
//---------------------------------------------------------------------------



void __fastcall TTreeViewMainForm::SaveTreeImage1Click(
      TObject *Sender)
{

    if (SaveDialog1->Execute())
    {
        TreeImage->Picture->Bitmap->PixelFormat = 6;
        TreeImage->Picture->Bitmap->SaveToFile(SaveDialog1->FileName);
    }
}
//---------------------------------------------------------------------------


void __fastcall TTreeViewMainForm::SaveThumbnailImage1Click(
      TObject *Sender)
{
    if (SaveDialog1->Execute())
    {
        SmallGeneImage->Picture->Bitmap->PixelFormat = 6;
        SmallGeneImage->Picture->Bitmap->SaveToFile(SaveDialog1->FileName);
    }
}
//---------------------------------------------------------------------------

void __fastcall TTreeViewMainForm::SaveZoomedImage1Click(TObject *Sender)
{

    if (Cluster->BestNode != NULL)
    {
       char FileRoot[100];
       fnsplit(OpenDialog1->FileName.c_str(),NULL,NULL,FileRoot,NULL);
       SaveDialog1->FileName = AnsiString(FileRoot) + "_" + Cluster->BestNode->Data->ID
            + ".bmp";
    }

    if (SaveDialog1->Execute())
    {
        Graphics::TBitmap *WholeZoomImage = new Graphics::TBitmap();
        WholeZoomImage->PixelFormat = 6;
        WholeZoomImage->Width = ZoomImage->Width + LabelPanel->Width;
        WholeZoomImage->Height = ArrayTreeImage->Height +
            ArrayLabelImage->Height +
            NodeBarcodeImage->Height +
            ZoomImage->Height;
        WholeZoomImage->Height += 20;
        WholeZoomImage->Canvas->CopyMode = cmSrcCopy;

        TRect DestRect;

        DestRect.Top    = 0;
        DestRect.Left   = 0;
        DestRect.Right  = ArrayTreeImage->ClientWidth;
        DestRect.Bottom = ArrayTreeImage->ClientHeight;

        WholeZoomImage->Canvas->CopyRect(DestRect,ArrayTreeImage->Canvas,ArrayTreeImage->ClientRect);

        DestRect.Top    = DestRect.Bottom + 3;
        DestRect.Left   = 0;
        DestRect.Right  = ArrayLabelImage->ClientWidth;
        DestRect.Bottom = DestRect.Top + ArrayLabelImage->ClientHeight;

        WholeZoomImage->Canvas->CopyRect(DestRect,ArrayLabelImage->Canvas,ArrayLabelImage->ClientRect);

        DestRect.Top    = DestRect.Bottom + 3;
        DestRect.Left   = 0;
        DestRect.Right  = NodeBarcodeImage->ClientWidth;
        DestRect.Bottom = DestRect.Top + NodeBarcodeImage->ClientHeight;

        WholeZoomImage->Canvas->CopyRect(DestRect,NodeBarcodeImage->Canvas,NodeBarcodeImage->ClientRect);

        DestRect.Top    = DestRect.Bottom + 3;
        DestRect.Left   = 0;
        DestRect.Right  = ZoomImage->ClientWidth;
        DestRect.Bottom = DestRect.Top + ZoomImage->ClientHeight;

        WholeZoomImage->Canvas->CopyRect(DestRect,ZoomImage->Canvas,ZoomImage->ClientRect);

        DestRect.Left   = DestRect.Right;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -