Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2014, 18:44   #1
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию Перевести код из Дельфи на С++

Если кому то не в лом, посмотрите пожалуста!
Код:
unit Unit1;
 
interface
 
uses  //После этого слова идет перечисление подключенных модулей.
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;
 
 //В этих модулях находится описание разных методов и процедур, 
 
//которые мы можем использовать
 
 
 
 
type  //После этого идет объявление типов
  TForm1 = class(TForm) //Начало описания нового объекта TForm1
    BitBtn1: TBitBtn; //Эта наша кнопка:
    PaintBox1: TPaintBox;
    procedure BitBtn1Click(Sender: TObject);  //Это событие от кнопки
    procedure draw();
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var    //Объявление глобальных переменных
  Form1: TForm1;  //это описана переменная Form1 типа объекта TForm1
 
implementation
 
{$R *.dfm}
 {Далее идет процедура, которую создал Delphi для обработки
 
события OnClick, когда мы дважды щелкнули по событию в 
 
объектном инспекторе.}
 
 procedure TForm1.BitBtn1Click(Sender: TObject);  //Имя процедуры
begin   //Начало процедуры
  draw();
 
end;  //Конец процедуры
 
 
 
 
 
procedure Tform1.draw(); //Имя процедуры
 
const
    iterations = 50000;  //Кол-во итераций
 
var //Объявление глобальных переменных
    t, x, y: real;
        p: real;//CЛУЧАЙНАЯ ВЕЛИЧИНА
    k: longint;
    mid_x, mid_y, radius: integer;
 
begin   //Начало процедуры
    mid_x := paintbox1.width div 2;
    mid_y := paintbox1.height -100 ;
    radius := trunc(0.1 * mid_y);
    randomize;
    x := 1.0;
    y := 0.0;
    for k := 1 to iterations do
    begin
        p := random;
        t := x;
        if p <= 0.85 then  //Построение верхней части листа
                    begin
            x := 0.84 * x -0.045  * y;
            y := 0.045  * t + 0.86   * y + 1.6;
        end
        else
        if p <= 0.92 then  //Построение левого  листа
        begin    //Начало процедуры
            x := 0.25   * x - 0.26 * y;
            y := 0.23 * t + 0.25   * y + 1.6;
 
        end                //Построение правого листа
        else if p <= 0.99 then
        begin                                           //Начало процедуры
            x := -0.135   * x + 0.28 * y;
            y := 0.26 * t + 0.245 * y + 0.44;
        end
        else
        begin              //Построение стебля
            x := 0.0;
            y := 0.16 * y  ;
        end;
                    paintbox1.Canvas.Pixels[mid_x+round(radius*x), mid_y-round(radius*y)+35]:=clGreen
    end
    end.//Конец модуля. После end и точки никакой код больше не воспринимается.
Dimka-novitsek вне форума Ответить с цитированием
Старый 03.06.2014, 19:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На какой Си? Борланд? Микрософт? Еще чего нить?
И потом проще будет вытрясти из тебя формулу этих твоих "фракталов" что ли, и написать совершенно другую программу наверное.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2014, 10:05   #3
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

без объектов перевести ваш код не проблема, а так на ++ я не знаю как и где канву взять и написать + окна и т.д.
т.е. тупо алгоритм не проблема перевести основу, а далее все что из библиотек берется - об этом я не скажу.
IvaniuS вне форума Ответить с цитированием
Старый 05.06.2014, 18:33   #4
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Понял... Спасибо за информацию в целом.

Я формулу и сам не знаю, это со старого диска.

С++ "C:\Program Files\Microsoft Visual Studio 10.0
Dimka-novitsek вне форума Ответить с цитированием
Старый 05.06.2014, 20:33   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пример рисования фигур:
Рисовалка.rar
Еще пример:
Код:
#include "stdafx.h"
#include "Рисовать в окне.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;								// current instance
TCHAR szTitle[MAX_LOADSTRING];					// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];			// the main window class name

// Forward declarations of functions included in this code module:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

 	// TODO: Place code here.
	MSG msg;
	HACCEL hAccelTable;

	// Initialize global strings
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);


	if (!InitInstance (hInstance, nCmdShow))
	{
		return FALSE;
	}

	hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));

	// Main message loop:
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	return (int) msg.wParam;
}


ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY));
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_MY);
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

	return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		Ellipse(hdc,1,1,50,50) ;
		// TODO: Add any drawing code here...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
		{
			EndDialog(hDlg, LOWORD(wParam));
			return (INT_PTR)TRUE;
		}
		break;
	}
	return (INT_PTR)FALSE;
}
Ты все еще хочешь перевести в VC?
Может не стоит? Ранновато тебе Win API изучать (без обид), это не компонентами накидываться на формы, тут все руками прописывать от и до.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.06.2014, 20:55   #6
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

СПАСИБО!!!!!!
Dimka-novitsek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите перевести код Pascal в код Lazarus Ляйсан9517 Lazarus, Free Pascal, CodeTyphon 13 22.05.2014 17:19
Перевести код с дельфи dim5 C++ Builder 1 21.05.2014 11:46
Надо перевести код с Паскаля в код Lazarus Ляйсан9517 Помощь студентам 7 06.04.2014 22:44
Перевести на Дельфи косинусное преобразование MrJenika Помощь студентам 0 26.02.2011 11:23