[VBA >> Delphi] Czy może ktoś to przetłumaczyć?

0

Witam!

Czy mógłby mi ktoś przetłumaczyć ten kod(VBA chyba) na kod Delphi (Ew. podać sposób na wywołanie WINAPOWSKIEGO dialogu wyboru kolorów w Delphi?)

 	
Private Declare Function ChooseColor Lib "comdlg32.dll" Alias _
"ChooseColorA" (pChoosecolor As CHOSECOLOR_TYPE) As Long
Private Type CHOSECOLOR_TYPE
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As String
    flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
Private Const CC_RGBINIT = &H1
Private Const CC_FULLOPEN = &H2

Private Function zbChooseColor(lRetCancel As Long, _
Optional lDefColor As Long = 0) As Long
Dim cc As CHOSECOLOR_TYPE

With cc
.lStructSize = Len(cc)
.flags = CC_FULLOPEN Or CC_RGBINIT
' zainicjuj kolory niestandardowe jako szare
.lpCustColors = String(16 * 4, 192)
.rgbResult = lDefColor
lRetCancel = ChooseColor(cc)
zbChooseColor = .rgbResult
End With
End Function
0

Może z C++ będzie Ci łatwiej napisać to w Delhpi

Ogólnie działa to tak (w Delphi zapewne tak samo).

Tworzysz sobie strukturkę CHOOSECOLOR

CHOOSECOLOR wybierz_kolor;

Następnie uzupełniasz ją sobie odpowiednimi danymi. Co i jak jest opisane w MSDN.

bool set_color(HWND hDialog, int dlgID)
{
	bool create = true;

	CHOOSECOLOR wybierz_kolor;

	DWORD            kolor     = 0x00ffffff;
	static DWORD     kolory[16];

	ZeroMemory(&wybierz_kolor, sizeof(CHOOSECOLOR));

	wybierz_kolor.lStructSize  = sizeof(CHOOSECOLOR);
	wybierz_kolor.hwndOwner    = hDialog;
	wybierz_kolor.rgbResult    = kolor;
	wybierz_kolor.lpCustColors = (LPDWORD) kolory;
	wybierz_kolor.Flags        = CC_FULLOPEN | CC_RGBINIT | CF_WYSIWYG;
		
	char r[10]={0};
	char g[10]={0};
	char b[10]={0};
	char hash[] = "#";

	char wartosc[31]={0};

	if(ChooseColor(&wybierz_kolor) == NULL)
		create = false;
	else
	{
		sprintf(r,"%2.2X",GetRValue(wybierz_kolor.rgbResult)); // konwersja szesnastkowa
		sprintf(g,"%2.2X",GetGValue(wybierz_kolor.rgbResult)); // konwersja szesnastkowa
		sprintf(b,"%2.2X",GetBValue(wybierz_kolor.rgbResult)); // konwersja szesnastkowa

		strcpy(wartosc,hash);
		strcat(wartosc,r);
		strcat(wartosc,g);
		strcat(wartosc,b);

		SetDlgItemText(hDialog,dlgID,wartosc);	
	}

	return create;

}
0

No wiesz, to taka ułomność delphi, nie ma tych windowsowych dialogów(niby są, ale w WINAPI nie będę używał tych, bo one z vcl są), dlatego zależy mi na tym tłumaczeniu. Nawet jednej struktury nie ma.

1 użytkowników online, w tym zalogowanych: 0, gości: 1