Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++Builder] Создание бегущей строки


Автор: Kay 22.1.2007, 21:35
Нужно взять из файла, лежащего в каталоге с программой все нечётные строки, склеить их и пустить бегущей строкой по экрану. Бегущая строка должна быть сама по себе, без окошек. В упор не знаю как сделать последнее. Помогите что ли ))

Автор: mr.Anderson 22.1.2007, 21:47
Что значит "без окошек"? Как вариант (если я все правильно понял), можно поместить на форму метку TLabel, а в нее уже и пихать полученную из файлов строку, обрабатывать через циклы и т.д.

Автор: Kay 23.1.2007, 22:05
Ну да, я не очень понятно выразился. Формы как таковой, не должно быть видно - просто бегущая строка, как в телевизоре в новостях, например. Она должна идти поверх того, что в данный момент на экране.

Автор: mr.Anderson 23.1.2007, 22:43
Могу предложить сделать программу все же с формой, только без рамки (BorderStyle = bsNone). На ней разместить бегущую строку. Сделать размер по ширине пользовательского экрана и сделать возможным ее передвигать, держась прямо за форму. Получится то же самое. Только плюс у формы врубить свойство StayOnTop, и получится как раз то, что вам нужно.

Автор: Kay 28.1.2007, 00:09
Не, боюсь что это не то. Я вот думаю, может можно сделать форму прозрачной, как в ХР

Автор: Oleg_Ci 28.1.2007, 06:39
Может на рабочий стол тогда рисовать?

Автор: Kay 28.1.2007, 12:01
Это бы подошло, а как это сделать?

Я вот так могу, но экран сильно мерцает

Код

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

#include <vcl.h>
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

AnsiString mpath, output;

TPoint pos;

HDC DC;
//TCanvas *dCanvas = new TCanvas();

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    this->Visible = false;

    mpath = ExtractFilePath(ParamStr(0));

    output = "";

    if (FileExists(mpath + "file.txt"))
    {
        TStringList *data = new TStringList();
        data->LoadFromFile(mpath + "file.txt");
        for (int i = 0; i < data->Count; i++)
        {
            if (i % 2 == 1)
            {
                output += data->Strings[i];
                output += "   ";
            }
        }
        data->Free();
    }
    else
    {
        return;
    }

    DC = GetDC(0);
    //dCanvas->Handle = DC;

    try
    {
        SetBkMode(DC, TRANSPARENT);
        SetBkColor(DC, 0);

        Timer1->Enabled = true;
        Timer1->Interval = 400;
        pos.x = 0;
    }
    catch ( ... )
    {
        ReleaseDC(0, DC);

    }
}
//---------------------------------------------------------------------------
void makePos(TPoint &p)
{
    randomize();
    if (p.x >= Screen->Width)
    {
        p.x = 0;
    }
    if (p.x == 0)
    {
        p.y = random(Screen->Height - 40);
    }
    p.x += 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    makePos(pos);

    InvalidateRect(0, 0, true);
    Sleep(10);
    TextOut(DC, pos.x, pos.y, output.c_str(), output.Length());
    
  
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    ReleaseDC(0, DC);
    //dCanvas->Handle = 0;
    //dCanvas->Free();
}
//---------------------------------------------------------------------------


Автор: Oleg_Ci 28.1.2007, 16:05
Эта программка пишет на рабочем столе строчку букв.
MVS2005(не bilder).
Код

#include <windows.h>
#include <wchar.h>
#define UNICODE


int APIENTRY WinMain(
        HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
{
    HWND hWnd = GetDesktopWindow();
    HDC hDC = GetWindowDC( hWnd );

    LOGFONT lf = {0};
    lf.lfHeight = 30;
    lf.lfWidth = 15;
    wcscpy( lf.lfFaceName, TEXT("Arial"));

    HFONT hFont = CreateFontIndirect( &lf );
    SelectObject( hDC, hFont );

    LPCWSTR str = TEXT("qpwoerkdxcоловыф");
    SetBkMode( hDC, TRANSPARENT );
    TextOut( hDC, 200, 200, str, wcslen(str));
    DeleteObject( hFont );

    Sleep(2000);
    return 0;
}

Автор: Kay 1.2.2007, 00:51
угу, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)