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

[VBA >> Delphi] Czy może ktoś to przetłumaczyć?
MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
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?)

Kopiuj
 	
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
Herk
  • Rejestracja:ponad 20 lat
  • Ostatnio:ponad 8 lat
  • Postów:272
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

Kopiuj
CHOOSECOLOR wybierz_kolor;

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

Kopiuj
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;

}

---
MA
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 16 lat
  • Postów:501
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.