با سلام به اساتید عزیز من توی یه پروژه با emWin یه ListView ایجاد کردم . حالا می خوام عدد ردیف رو که روی اون های لایت شده بخونم، چطور این کار رو انجام بدم ؟؟ ممنون
با سلام به اساتید عزیز من توی یه پروژه با emWin یه ListView ایجاد کردم . حالا می خوام عدد ردیف رو که روی اون های لایت شده بخونم، چطور این کار رو انجام بدم ؟؟ ممنون
سوال من قابل جواب نبود ؟؟؟؟
سلام
منوال خود emwin می تونه کمک کنه:
LISTVIEW_GetSel()
Description
Returns the index of the currently selected row in a specified LISTVIEW widget.
Prototype
int LISTVIEW_GetSel(LISTVIEW_Handle hObj);
Return value
Index of the currently selected row.
با تشکر فراوان از dostajn عزیز، اگه ممکنه یه مثال هم بزنید ممنون میشم
من می خوام عدد بدست اومده رو با یه سری اعداد دیگه مقایسه کنم
ویرایش توسط kmz : 30-08-2017 در ساعت 17:33
سلام.
من یک برنامه نوشتم که یک نمودار سینوسی را با فاز رندوم با فشردن یک کلیک رسم کنه. یک کلید دیگه هم گذاشتم که شکل رو پاک کنه اما بعد از اینکه 4 بار کلیک رسم شکل رو میزنم برنامه دیگه هنگ میکنه ممنون میشم کمک کنین. در ادامه هم کدی که نوشتم رو قرار میدم.
/************************************************** *******************
* *
* SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
* *
************************************************** ********************
* *
* C-file generated by: *
* *
* GUI_Builder for emWin version 5.22 *
* Compiled Jul 4 2013, 15:16:01 *
* (c) 2013 Segger Microcontroller GmbH & Co. KG *
* *
************************************************** ********************
* *
* Internet: SEGGER - Software Development Tools for Embedded Systems Support: support@segger.com *
* *
************************************************** ********************
*/
// USER START (Optionally insert additional includes)
// USER END
#include <stdlib.h>
#include <string.h>
#include "math.h"
#include "TouchPanel.h"
#include "DIALOG.h"
#include "GRAPH.h"
/************************************************** *******************
*
* Defines
*
************************************************** ********************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_GRAPH_0 (GUI_ID_USER + 0x03)
#define ID_EDIT_0 (GUI_ID_USER + 0x05)
#define ID_EDIT_1 (GUI_ID_USER + 0x06)
// USER START (Optionally insert additional defines)
// USER END
/************************************************** *******************
*
* Static data
*
************************************************** ********************
*/
static GUI_COLOR _aColor = {GUI_BLUE}; /* Array of colors for the GRAPH_DATA objects */
static I16 _aValue[1000];
static GRAPH_DATA_Handle _ahData; /* Array of handles for the GRAPH_DATA objects */
//static int _flaggraph=1;
// USER START (Optionally insert additional static data)
// USER END
static void _samplesinerand(void) {
int jj;
double vv=rand();
for (jj=0;jj<1000;jj++){
_aValue[jj]=40*sin(2*3.14*0.01*jj+vv)+100;}
// GRAPH_DATA_YT_AddValue(_ahData, _aValue);
}
/************************************************** *******************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "testgraph3", ID_WINDOW_0, 0, 0, 800, 480, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 106, 116, 150, 50, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 106, 280, 150, 50, 0, 0x0, 0 },
{ GRAPH_CreateIndirect, "Graph", GUI_ID_GRAPH0, 356, 37, 400, 400, 0, 0x0, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_0, 84, 178, 200, 40, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_1, 84, 233, 200, 40, 0, 0x64, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/************************************************** *******************
*
* Static code
*
************************************************** ********************
*/
// USER START (Optionally insert additional static code)
// USER END
/************************************************** *******************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int NCode;
int Id;
int iit=0;
//I32 xx=10,*AAV;
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
//
// Initialization of 'testgraph3'
//
hItem = pMsg->hWin;
WINDOW_SetBkColor(hItem, 0x0080FF00);
//
// Initialization of 'Button'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetText(hItem, "graph");
BUTTON_SetFont(hItem, GUI_FONT_24B_1);
//
// Initialization of 'Button'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
BUTTON_SetText(hItem, "clear");
BUTTON_SetFont(hItem, GUI_FONT_24B_1);
//
// Initialization of 'Edit'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
EDIT_SetText(hItem, "");
EDIT_SetFont(hItem, GUI_FONT_24B_1);
EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
//
// Initialization of 'Edit'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
EDIT_SetText(hItem, "123");
EDIT_SetFont(hItem, GUI_FONT_24B_1);
EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_GRAPH0);
/* Add graphs */
GRAPH_SetColor(hItem,GUI_WHITE,GRAPH_CI_BK);
//GRAPH_SetVSizeX(hItem, 1000);
// USER START (Optionally insert additional code for further widget initialization)
// USER END
if (iit==0){
_samplesinerand();
iit=2;}
//AAV=&xx;
//&xx=AAV;
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_GRAPH0);
_samplesinerand();
_ahData = GRAPH_DATA_YT_Create(_aColor, 1000, _aValue, 1000);
GRAPH_AttachData(hItem,_ahData);
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
//EDIT_SetText(hItem, "");
//AAV=&_aValue[0];
//EDIT_SetHexMode(hItem, AAV, 0, 10000000);
EDIT_SetFloatMode(hItem, _aValue[0], 0, 100, 0, GUI_EDIT_NORMAL);
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_BUTTON_1: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_GRAPH0);
GRAPH_DetachData(hItem,_ahData);
_ahData=0;
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_EDIT_0: // Notifications sent by 'Edit'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_VALUE_CHANGED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
case ID_EDIT_1: // Notifications sent by 'Edit'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_VALUE_CHANGED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
}
/************************************************** *******************
*
* Public code
*
************************************************** ********************
*/
/************************************************** *******************
*
* Createtestgraph3
*/
void MainTask(void) {
WM_HWIN hDlg, hGraph = 0;
int tt=0;
Touch_Calibrate();
// GUI_Init();
GUI_CURSOR_Show();
//WM_SetDesktopColor(GUI_BLACK);
//#if GUI_SUPPORT_MEMDEV
// WM_SetCreateFlags(WM_CF_MEMDEV);
//#endif
hDlg = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
// GUI_Delay(1);
while (1) {
// tt++;
// if ((tt%10)==0)
// { tt=0;
//else
//{
//GRAPH_DATA_YT_Clear(hGraph);
//}
//}
// hGraph = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0);
// _AddValues(hGraph);
GUI_Delay(10);
//GUI_Exec();
//WM_Exec();
}
}
/*************************** End of file ****************************/
سلام دوست عزیز احتمالا توی برنامه از rtx استفاده کردید، من هم قبلا با این مشکل برخورد کردم فکر می کنم مشکل توی مدیریت تسک ها باشه
برنامه شما بدون rtx مشکلی نداره، من کلید گراف روی برنامه شما رو چندین بار زدم و مشکلی پیش نیومدفایل پیوست 9549
سلام
شرمنده دیر سر زدم:
بنده هم وارد نیستم اما کلیت کار رو بهتون می گم:
ببینیدشما برای ایجاد یه لیست نمایشی یه handle براش تعریف می کنید:
این متغییر سراسری تعریف میشه.کد:static LISTVIEW_Handle _hListView;
شما هرجا لازم دارین با فراخوانی این متغییر به مقصودتون می رسین:
مثلا ایجاد لیست:
پاکش کنین:کد:_hListView = LISTVIEW_Create(10, 80, 300, 89, 0, 1234, WM_CF_SHOW, 0);
ستون اضافه کنین:کد:WM_DeleteWindow(_hListView);
برای برنامه شما هم همینچوری میشهکد:LISTVIEW_AddColumn(_hListView, 100, "EAN", GUI_TA_CENTER);
الان با این دستور شما ردیف جاری رو دریافت می کنینکد:int index; index=LISTVIEW_GetSel(_hListView);
منبع هم برای بنده این ها هستن:مثال های ارائه شده از طرف خود emwin:
ته صفحه بالا دو تا فایل هست یکی فایل سی مربوط به مثال ها یکی هم کامپایل شده مثال ها که می تونید مثال ها رو روی ویندوز هم ببینید(خیلی عالیه...)کد:https://www.segger.com/products/user-interface/emwin/technology/samples/
کد:https://www.segger.com/downloads/emwin/emWin_Tutorials_EXE_7z https://www.segger.com/downloads/emwin/emWin_Tutorials_SRC_7z
سلام. من کار با emwin تازه میخام شروع کنم می خاستم ببینم
emWin 5.18 board support package for EA1788 Board میتونه lcd- 24bit رو درایو کنه. ممنون میشم راهنماییم کنین
ویرایش توسط mzarkoob : 10-09-2017 در ساعت 11:47
سلام خدمت دوستان مخصوصا آقای رئیسی
بنده نیز مشکل همین دوستمون رو دارم
درواقع یه متغییری دارم که تو تابع اینتراپت پلاس میشه حال چه طور باید متغییر به صورت اتوماتیک رو کادر editeآپدیت بشه
درحال حاضر حتما باید یه دکمه داخل صفحه رو لمس کنم تا از اون طریق بتونم مقدار جدید متغییر رو تو کادر مورد نظر نمایش بدم
گرافیک هم توسط guibuilderساخته شده
گویا کد سی تولید شده توسط این نرم افزار توسط switch,caseنوشته شده و برای آپدیت صفحه یا اصلا هرکاری را که بخوایم رو صفحه اتفاق بیافته حتما باید صفحه لمس بشه
اگه اینطور باشه چطور میشه به کمک emwinیه ساعت ساخت در اینصورت حتما باید صفحه رو لمس کنیم تا مقدار ساعت رو صفحه آپدیت بشه
ممنون میشم راهنمایی بفرماییدو از دوستان
سلام برای این کار شما باید با استفاده از تابع sendmessage داده مورد نظر رو بفرستید به دریچه ایی که در حال حاضر فعال هست.این طوری emwin
این پیغام رو میگیره و پیغام رو میفرسته برای دریچه.حالا شما داخل loop دریچه ، پیغام رو میگیرید و کاراکتر رو روی Editbox نمایش میدید.
این کار رو برای usart , RTC و غیره میشه انجام داد.
سلام
تابع sendmessageکه گفتید مربوط به کدوم فایل ها میشه کجا باید پیداش کنم
لازمه بگم که من دارم روstm32کارمیکنم و سورس برنامه من با سورس آموزش emwinآقای رئیسی فرق داره
درهرصورت
واینکه منظورتون از دریچه دقیقا چیه؟منظورتون windowای که باز است؟
واینکه حتما باید ازRTCوUSARTاستفاده کرد
شما منظورتون اینه که به کمک اینتراپت مثلاRTCمتغییر رو آپدیت کرد و به emwinفرستاد
حالا مثلا اگه تو حلقه whileتابع mainیه متغییری در حال افزایش باشه نمیشه این متغییر رو به داخل emwinفرستاد؟
بنظر شما کد سی تولید شده توسطguibuilderتوسط emwinیکبار آپدیت میشه و دو طول برنامه حتما برای آپدیت صفحه کاربر باید حتما صفحه رو لمس کنه تا emwinمجداا صفحه رو آپدیت کرده و دستورات داخل کد سی تولیدی رو اجرا کنه؟؟؟
پیدا کردم این تابعWM_SendMessageازتوابع خود emwinهست تو کتابخانه WM.h
الان این تابع رو کجای برنامه باید فراخوانی کنم؟؟؟
- - - Updated - - -
در واقع این تابع چی رو میفرسته به emwinمنظورم اینکه متغییراشاره گر که آرگومان دوم این تابع است
باید چی باشه؟؟
(void WM_SendMessage (WM_HWIN hWin, WM_MESSAGE * p
سلام. من rtx رو حذف کردم باز هم همین مشکل وجود داره. امکانش هست شما main برنامه که استفاده کردین رو بفرستین؟ رو چه میکرویی تست کردین؟ من رو lpc1768 انجام دادم به نظر مشکل مربوط به حافظست.
- - - Updated - - -
سلام. من rtx رو حذف کردم باز هم همین مشکل وجود داره. امکانش هست شما main برنامه که استفاده کردین رو بفرستین؟ رو چه میکرویی تست کردین؟ من رو lpc1768 انجام دادم به نظر مشکل مربوط به حافظست.
سلام من مشکلم حل شد یک سوال اساسی تر داشتم وقتی دستور GRAPH_DATA_YT_AddValue در حلقه while تابع maintask اجرا میکنم دیگه تاچ کار نمیکنه کسی میدونه باید چی.ار گنم. ممنون میشم جواب بدین.
اصلا شما خود مثال widget_GraphYT رو که اجرا میکنین نمیشه تاچ رو کار کرد. چرا؟ میشه درستش کرد. یعنی من می خوام یک داده ای رسم بشه و همچنین مثلا هر موقع که خواستم یک کلید رو فشار بدم رسمش متوقف شه
به اون شکل حل نشد از دستور GRAPH_DATA_YT_AddValue به جای ساخت و attach کردن داده به گراف استفاده کردم. ظاهرا از یک تعداد محدودی بیشتر نمیشه از دستور ساخت گراف استفاده کرد.
یک سوال دیگه داشتم من. وقتی کالیبره میکنم صفحه تاچ رو دقیق کالیبره نمیشه و نقطه موس یک مقدار با نقطه ای که لمس میکنم تفاوت مکان داره که بسته به جای صفحه تغییر میکنه و در بعضی جاها خیلی زیاد میشه.
چندین بار هم از دستور کالیبره کردن استفاده کردم همیشه همینطوریه
کالیبره بقیه هم همینطوریه؟ نمیشه دقیق دقیق کالیبره بشه؟ ممنون