Button mit Icon und Text

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hier ist ein einfaches Beispiel in VB über API.
Der Button wird weiter unten angezeigt.
Wenn ich Zeit habe, werde ich es in PB konvertieren.

http://www.vbarchiv.net/archiv/tipp_308.html

Das sieht dann so aus: Bild

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

das beispiel in VB ist nutzlos, weil

Code: Alles auswählen

 Picture1.Picture = LoadPicture(App.Path & _
    "\Bildgrau.gif")
weiß der der Geier, was der Befehl alles macht.

Ein C Beispiel wäre schön...
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Code: Alles auswählen

 Picture1.Picture = LoadPicture(App.Path &  "\Bildgrau.gif")
weiß der der Geier, was der Befehl alles macht.
ist kein Hexenwerk:

LoadPicture ist ein Pendant zu LoadImage() und lädt nur ein (beliebiges) Bild
in den Speicher und weist das Handle der Picture-Eigenschaft des Objektes
Picture1 zu.

Grüße ... Kiffi
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hallo GPI
Hier vielleicht aus der MSDN - SDK unter Using Buttons
unter Using Owner Drawn Buttons
Bin mir abe nicht sicher.
Gruß Falko

Folgende C_function:

Code: Alles auswählen

BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam, 
                          LPARAM lParam) 
{ 
    HDC hdcMem; 
    LPDRAWITEMSTRUCT lpdis; 
 
    switch (message) 
    { 
        case WM_INITDIALOG: 
 
            // hinst, hbm1 and hbm2 are defined globally. 
            hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1"); 
            hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2"); 
            return TRUE; 
 
        case WM_DRAWITEM: 
            lpdis = (LPDRAWITEMSTRUCT) lParam; 
            hdcMem = CreateCompatibleDC(lpdis->hDC); 
 
            if (lpdis->itemState & ODS_SELECTED)  // if selected 
                SelectObject(hdcMem, hbm2); 
            else 
                SelectObject(hdcMem, hbm1); 
 
            // Destination 
            StretchBlt( 
                lpdis->hDC,         // destination DC 
                lpdis->rcItem.left, // x upper left 
                lpdis->rcItem.top,  // y upper left 
 
                // The next two lines specify the width and 
                // height. 
                lpdis->rcItem.right - lpdis->rcItem.left, 
                lpdis->rcItem.bottom - lpdis->rcItem.top, 
                hdcMem,    // source device context 
                0, 0,      // x and y upper left 
                32,        // source bitmap width 
                32,        // source bitmap height 
                SRCCOPY);  // raster operation 
 
            DeleteDC(hdcMem); 
            return TRUE; 
 
        case WM_COMMAND: 
            if (wParam == IDOK 
                || wParam == IDCANCEL) 
            { 
                EndDialog(hDlg, TRUE); 
                return TRUE; 
            } 
            if (HIWORD(wParam) == BN_CLICKED) 
            { 
                switch (LOWORD(wParam)) 
                { 
                    case IDC_OWNERDRAW: 
 
                        // application-defined processing 
 
                        break; 
                } 
            } 
            break; 
 
        case WM_DESTROY: 
            DeleteObject(hbm1);  // delete bitmaps 
            DeleteObject(hbm2); 
 
            break; 
 
    } 
    return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
}
Bild
Win11 Pro 64-Bit, PB_6.11b1
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

@falco:
Damit zeichenet man den Button komplett selbst...

@Kiffi:
Schon klar, aber was macht alles Picture1.Picture = ?

Irgendwie hab ich das Gefühl, das ist einfach ein ButtonImageGadget()...
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hab mir mal was ausgedacht und direkt auf dem Button gemalt :mrgreen:

Das Icon Bild bekommt man hier (bitte mit Rechtsklick runterladen):

http://www.iconarchive.com/icon/art/gor ... t/Rojo.ico

Code: Alles auswählen

;Draw Image und Text im Button
;written by Falko 2005
;
;http://www.iconarchive.com/icon/art/gortsiconsvol1_by_gort/Rojo.ico
;
;TextStructure
Trect.RECT
Trect\left   =38 ;X-linke obere Ecke
Trect\top    =12 ;Y-linke obere Ecke
Trect\right  =80 ;X-rechte untere Ecke
Trect\bottom =25 ;Y-rechte untere Ecke

If OpenWindow(0,100,100,400,200,#PB_Window_SystemMenu,"Button")And CreateGadgetList(WindowID(0)) 
 Picture1 = LoadImage( 1,"Rojo.ico") ; Hier ein Grafik.ico 32x32 einfügen
 dc=ButtonGadget(2, 10,10,80,40,"")
 HDC=GetDC_(dc)
 SetBkMode_(HDC,#TRANSPARENT) ; Hintergrund Transparent
 SetTextColor_(HDC,$FF0000)   ; Textfarbe
 Repeat
    DrawText_(HDC,"FALKO",-1,Trect,#DT_SINGLELINE) ;Text zeichnen
    DrawIcon_(HDC,3,3,Picture1)                               ;Icon zeichnen
 Until WaitWindowEvent()=#PB_Event_CloseWindow
 CloseWindow(0)
EndIf
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Re: Button mit Icon und Text

Beitrag von nicolaus »

Donald hat geschrieben:Hi,
gibt es eine Routine mit der man in einem Button ein Icon und einen
Text (String) einblenden kann.
Wahlweise:

Icon links - Text rechts und umgekehrt ?
Icon oben - Text unten und umgekehrt ?
wenn du dich noch ca 2 - 3 tage gedulten kannst wirds da ne lib von mir geben die unter anderem das kann. wirst du dann auch auf purearea.net im showcase finden.
Benutzeravatar
Donald
Beiträge: 307
Registriert: 03.01.2005 02:21
Wohnort: Marl

Beitrag von Donald »

@ Falko

Danke, damit kommen wir der Sache schon was näher.


@ nicolaus

bin mal gespannt was die alles kann.
DONALD :D www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
Benutzeravatar
Donald
Beiträge: 307
Registriert: 03.01.2005 02:21
Wohnort: Marl

Re: Button mit Icon und Text

Beitrag von Donald »

nicolaus hat geschrieben: wenn du dich noch ca 2 - 3 tage gedulten kannst wirds da ne lib von mir geben die unter anderem das kann. wirst du dann auch auf purearea.net im showcase finden.
Hi nicolaus,
kannst du schon abschätzen wann es so weit ist mit der lib ???????
DONALD :D www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
Antworten