Seite 2 von 2

Verfasst: 08.01.2005 17:13
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

Verfasst: 08.01.2005 18:42
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...

Verfasst: 08.01.2005 18:49
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

Verfasst: 08.01.2005 18:55
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); 
}

Verfasst: 08.01.2005 19:04
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()...

Verfasst: 09.01.2005 06:48
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

Re: Button mit Icon und Text

Verfasst: 09.01.2005 07:44
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.

Verfasst: 10.01.2005 13:30
von Donald
@ Falko

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


@ nicolaus

bin mal gespannt was die alles kann.

Re: Button mit Icon und Text

Verfasst: 14.01.2005 03:41
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 ???????