Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - nosferatus

Stran: [1] 2
1
Hardware / Re:Dlouho trvá start systému
« kdy: 28. 07. 2015, 10:51:42 »
Ale dělaj to oba disky, proč si myslíš že by to mělo být diskama? Disky na jiné desce fungovaly. A taky než jsem včera večer instaloval ten Windows a pak ovladače, tak jsem měl nabootováno z druhého disku a připojený první disk. To je divné že až po instalacích se tohle stane ne před tím. Tj. instalovaly se aktualizace apod. Tak nechápu jak mohou instalace něco ovlivnit tak aby BIOS nedokázal zavést systém.
Desku mám měsíc, ale koupil jsem ji od někoho jiného. Je kupovaná na alfa.cz a jako kupec je uvedeno jméno firmy. Není mi jasné jestli lze v takovém případě provést reklamaci když nejsem ten původní vlastník.

2
Hardware / Dlouho trvá start systému
« kdy: 28. 07. 2015, 09:29:34 »
Mám dva disky a na obou to samé. Deska 990FXa-GD80 s UEFI BIOSEM. Disky jsou na oddílů je jich tam na každém asi tak 20. Na prvním oddílu je systém. Včera jsem tam měl jen ten první, nainstaloval jsem tam Windows XP. Start a restart v pořádku. Pak jsem doinstaloval ovladače chipsetu apod. V noci jsem to vypnul, dosadil druhý disk a ráno zapnu a PC nenajíždí (detekce disků trvá dlouho, ani do BIOSu nejde najet).

Přitom zkušenost s druhým diskem je tato: dělalo to podobně, ale najelo asi po 5-10 minutách. Pak se to nějak záhadně samo opravilo a po restartu už disk najížděl normálně. To bylo asi tak před 14 dnama. Nyní po včerejšku, viz první odstavec, zapnu a nenajíždí. Nemá smysl čekat 20-30 minut nebo jak dlouho. Tak jsem to vypnul, odpojil disky, najel do BIOSU, dal jsem load defaults, připojil první disk, nepomohl. Zkouším druhý taky najíždí dlouho ale rozjede se asi po 5 minutách.

Čím myslíte že by to mohlo být? Hádám že je to zas dočasné, ale nevím co musím udělat pro to aby najížděl normálně. Projevuje se to tak, že nejdříve svítí červená kontrolka HDD celou dobu občas svítí intenzivněji. Čekám dokud nezhasne. To jsem poprvé čekal a myslím že zhasla, ale nic se nedělo. Když jsem pak zkoušel ten druhý disk samostatně, tak zhasla a pak se rozsvítila a slyšel jsem že data se načítají a OS se načítá a pak jsem najel. V případě toho prvního to buď trvá moc dlouho nebo to nepomáhá vůbec.

3
zaokrouhlil to na sektory, ale myslíš Gparted, Disk Managment nebo průzkumíka? V Disk Managementu jsou ty oddíly menší o 0,01 GB (nejsou to celé GB). V průzkumníku jsou celé GB. Otázka ale je kdo to ukazuje špatně jestli Disk Managment nebo Průzkumník.
C:\WINDOWS\system32\diskmgmt.msc

4
Běžně používám Disk Managment, kliknu na disk a vyberu vlastnosti. To samé se dá udělat z Průzkumníka.
Jo tak teď jsem to porovnal a není to to samé. Takže v tom Disk Managmentu to asi ukazuje špatně! Zaokrouhlil.

5
Čím si vysvětlujete to že velikost oddílů není správná 9*1024*1024*1024 ? Je možné že by to Gparted nějak zaokrouhloval nebo měnil nebo jsem spíš já špatně opsal číslo? Když vezmu velikost oddílu 9663672320 a podělím 1024/1024 tak dostávám 9215,99609375 MB, čili tuto hodnotu jsem snad v Gparted ani nemohl zadat. Čili nechápu jak to vzniklo. Ale teď se dívám i na ostatní oddíli a Windows ukazuje méně než jsem zadával. Tak že by to Windows XP ukazovaly špatně?

6
Zdravím, mám takový menší problém. Zazálohoval jsem si oddíl s Windows XP oddílem na prvním disku. Pak jsem přerozdělil celou partition table. Když jsem chtěl oddíl obnovit a porovnal jsem velikosti dostal jsem toto:

aktuální velikost oddílu: 9 663 672 320 bytů (vytvořeno v G-parted)
správná velikost má být:  9 663 676 416 bytů (tj. 9*1024)
záloha má:        9 664 667 648 bytů (přitom oddíl byl kdysi vytvořen taky v G-parted a měl mít 9*1024 bytů)

Z toho vyplývá, že záloha je o něco větší. Dá se obnovit záloha tak, aby se tam vešla? Jak zadat specifikace bs a count?
Zkoušel jsem toto:

Kód: [Vybrat]
dd if=L:\bottom_C_XP1.dd of=\\.\x:  bs=1M count=9216
9216+0 records in
9215+2 records out

A nevím co znamenají ty čísla hlavně +0 a +2? Vím že když by se to povedlo tak by tam bylo něco jako 9216+0 u obou.
Když teď kliknu na X: tak mi to píše hlášku že disketa není naformátovaná a nabízí možnost naformátovat oddíl (oddíl je typu raw).

7
Distribuce / Mageia 4.1 disk space requirements
« kdy: 16. 07. 2015, 19:31:45 »
Nevíte kolik místa je třeba na instalaci Mageia 4.1? Mám jedno DVD 64 bitovou verzi a rozmýšlím se že bych ji zkusil spolu s Windowsem, jen nevím jestli mi vyjde místo.

8
Vývoj / Měnitelná šířka comboboxu (VS)
« kdy: 05. 07. 2015, 17:54:46 »
Mám formulář ve kterém mám hodně combo boxů a aby se mi vešli na stránky tak jim potřebuju nastavit co nejmenší velikost, ale když na ně kliknu aby se rozbalil seznam položek tak aby byly vidět, tedy aby se automaticky přizpůsobyla šířka listboxu. Víte jak na to? Potřebuju to pro Visual Studio C++ 2010 Express.

9
Vývoj / Re:Problém s výběrem listboxu v C++ Visual Studio
« kdy: 05. 07. 2015, 11:04:06 »
Z manuálu:
Citace
The SendDlgItemMessage function does not return until the message has been processed.

Using SendDlgItemMessage is identical to retrieving a handle to the specified control and calling the SendMessage function.

Je třeba počkat až se daná zpráva zpracuje než mohu pokračovat. Kdyby se nepočkalo mohlo by to mít na něco vliv v případě, že se akce provede moc rychle (například díky makru, programu na urychlení/zautomatizování práce s jiným programem).

10
Vývoj / Re:Problém s výběrem listboxu v C++ Visual Studio
« kdy: 04. 07. 2015, 21:53:13 »
Všiml jsem si že v tom programu je nějaká funkce ListBox_Find, ale je to v jiném modulu a v jiném souboru tak jsem si toho dříve nevšiml:

Kód: [Vybrat]
SetDlgItemInt(dialog, IDC_U_CONST, type->id(), FALSE);
current_index = ListBox_Find(unitbox, type);

Kód: [Vybrat]
unsigned ListBox_Find(HWND unitbox, const void *type)
{
int index;
index = SendMessageW(unitbox, LB_GETCOUNT, 0, 0);

while (index--)
{
if (List_GetItemData_cPtr(unitbox, index) == type)
return index;
}

return UINT_MAX;
}
inline const void * List_GetItemData_cPtr(HWND control, WPARAM index)
{
LRESULT data = SendMessageW(control, LB_GETITEMDATA, index, 0);
return (data != LB_ERR) ?
reinterpret_cast<const void *>(data) : NULL;
}

Nejspíš to bylo určeno k tomu co chci. On tam totiž už jeden listbox uspořádaný existuje a výběr položky tam je taky. Nevím proč mě to nenapadlo dříve se tam podívat jak se to řeší v tom druhém modulu.
Asi je to tím je v tom prvním modulu to bylo odfláknuté a uspořádání autor prostě neřešil.

Teď mi stačí toto:
Kód: [Vybrat]
if ( tn->cnst != 0xff ){
link = esdata.terrains.getById(tn->cnst);
name = link->name();
SendDlgItemMessageW(dialog, IDC_U_TR_TERRAIN, CB_SELECTSTRING, -1, (LPARAM) name );
}
Spouštím u funkce Units_Load(HWND dialog) (druhý modul, první modul se týkal terénu).

Když tak zítra zkusím tu druhou funkci.

Ještě řeším jeden problém. Tomu poslednímu kódu co jsem uvedl předchází:
Kód: [Vybrat]
SetDlgItemFloat(dialog, IDC_U_X, u->x);
SetDlgItemFloat(dialog, IDC_U_Y, u->y);
což nastaví edit boxy x,y na hodnoty x,y a teprve potom mohu provést ten poslední kód. Problém je však v tom, že to nezareaguje hned, ale změna která měla být provedena na aktuální položce se projeví až u položky následující.

11
Vývoj / Re:Problém s výběrem listboxu v C++ Visual Studio
« kdy: 04. 07. 2015, 13:40:43 »
Tak jsem si ještě jednou přečetl ty zbývající odpovědi a už tedy chápu proč se mění ten index.
Stejně ale ještě nechápu jak to celé vyřešit.

Měl bych místo link:
Kód: [Vybrat]
LRESULT LinkListBox_Add(HWND listbox, const Link *link)
{
WPARAM index = List_AddStringW(listbox, link->name());
LPCWSTR name = link->name();
int ID = link->id();
List_SetItemData(listbox, index, link);
return index;
}

zadat ID?
Kód: [Vybrat]
LRESULT LinkListBox_Add(HWND listbox, const Link *link)
{
WPARAM index = List_AddStringW(listbox, link->name());
LPCWSTR name = link->name();
int ID = link->id();
List_SetItemData(listbox, index, ID);
return index;
}

12
Vývoj / Re:Problém s výběrem listboxu v C++ Visual Studio
« kdy: 04. 07. 2015, 12:26:29 »
Tak ukládám ty indexy a zjišťuju, že ta funkce LinkListBox_Add nemá ten index jedinečný. Jak je ten seznam uspořádaný tak to nevrací např.
0,3,1,4,5,2, ale např. 0,1,0,0,3,2,3,0,2 apod, prostě jsou tam duplicity. To je normální? Já potřebuju jedinečné číslo. Možná to celé dělám špatně, měl bych nejdříve vložit ty stringy a až se to uspořádá celé to projet a nastavit tomu ty indexy?
Domnívám se že vysvětlení toho proč ty indexy se pořád mění a uloží se duplicitní je v tom že jak se přesouvá jedna a ta samá položka z místa na místo když tam přibývají jiné položky tak se mění jeho index.

Kód: [Vybrat]
int terrainIndecies[MAX_TERRAINS]; // needed to select item in sorted list/combo
int * pTerrainIndecies = terrainIndecies;
LinkListBox_Fill_keepAssociations(GetDlgItem(dialog, IDC_TR_ID),
esdata.terrains.head(), pTerrainIndecies);

Kód: [Vybrat]
int LinkListBox_Fill_keepAssociations(HWND listbox, Link *list, int * associations)
{
int index;
for (; list; list = list->next()){
index = LinkListBox_Add(listbox, list);
associations[list->id()] = index; // save for purposes of ordered list to select correct item
}
return *associations;
}

LRESULT LinkListBox_Add(HWND listbox, const Link *link)
{
WPARAM index = List_AddStringW(listbox, link->name());
LPCWSTR name = link->name();
int ID = link->id();
List_SetItemData(listbox, index, link);
return index;
}

cycle 1:
ID: 0
index: 0
name: Grass 1

cycle 2:
index: 1
ID: 1
name: Water, Shallow

cycle 3:
index: 0 (PROČ???)
ID: 2
name: Beach

cycle 4:
index: 1 (PROČ???)
ID: 3
name: Dirt 3

cycle 5:
index: 3 (PROČ???)
ID: 4
name: Shallows

cycle 6
index: 3 (PROČ???)
ID: 5
name: Leaves


13
Vývoj / Re:Problém s výběrem listboxu v C++ Visual Studio
« kdy: 04. 07. 2015, 10:46:27 »
Díky moc za vysvětlení, tak krásně vysvětlené jsem to nikde nenašel. Na msdn jsem to vůbec nepochopil, oni sice píšou že

LB_SETITEMDATA message

"Sets a value associated with the specified item in a list box.
Parameters"

Ale co ta hodnota znamená a jak to funguje jsem tam nenašel.

wParam

    Specifies the zero-based index of the item. If this value is -1, the

 lParam value applies to all items in the list box.

Těmi daty tedy myslíš lParam předpokládám?

V té původní funkci která je v programu který bych rád změnil je tento kód:

Kód: [Vybrat]
LRESULT LinkListBox_Add(HWND listbox, const Link *link)
{
WPARAM index = List_AddStringW(listbox, link->name());
List_SetItemData(listbox, index, link);
return index;
}

Ten je tedy podle toho jak to říkáš, že to vrací index té položky kde se nachází v seznamu a přiděluje to tomu linku. Nechápu však proč přestane vybírat správnou položku...

Když se znovu podívám na to co dělám a co je v LB_SETCURSEL
SendDlgItemMessage(dialog, IDC_TR_ID, LB_SETCURSEL, tn->cnst, 0);

Píše se:
"wParam - Specifies the zero-based index of the string that is selected."

Takže já tam neposílám index, ale data. To tedy asi znamená, že ve funkci
LinkListBox_Add bych měl uložit ten index do nějakého objektu abych to mohl později vybrat.

14
Vývoj / Výběr listboxu v C++ Visual Studio
« kdy: 03. 07. 2015, 21:50:07 »
Visual Studio C++ 2010

Mám listbox s názvy térénu. Informace o druzích indexů a názvů jsou uloženy v objektu esdata.terrains a ve struktuře, která se zpřístupnňuje přes pointer tn. tn->cnst obsahuje index položky, která se zrovna zpracovává (index=id).

Problém je ten že funkce funguje jen když listbox není uspořádaný pomocí LBS_SORT.

Tyto funkce jsou v programu původní:

Kód: [Vybrat]
LinkListBox_Fill(GetDlgItem(dialog, IDC_TR_ID), esdata.terrains.head());

Kód: [Vybrat]
void LinkListBox_Fill(HWND listbox, Link *list)
{
for (; list; list = list->next())
LinkListBox_Add(listbox, list);
}
LRESULT LinkListBox_Add(HWND listbox, const Link *link)
{
// Fill value into the list box:
WPARAM index = List_AddStringW(listbox, link->name());
// With AOK link->id() returns result qual to index
// Associate index with the list box:
List_SetItemData(listbox, index, link);
return index;
}

Když položky nejsou uspořádané a jsou správně zobrazené, tak když změním hodnotu x,y v edit boxu, pak
správný terén je vybrán.

Kontroloval jsem to a dostal jsem tyto hodnoty:

Když je index 5 (tn->cnst == 5) je asociován s názvem "leaves" a index 10 je asociován s "forest". index 0 je "grass 1".
To je vše OK.


Problém nastává když se snažím položky uspořádak, pak se nevybere správná položka.
Vytvořil jsem novou funkci na kontrolu hodnot:
Kód: [Vybrat]
LRESULT LinkListBox_Add_ByID(HWND listbox, const Link *link)
{
WPARAM indexByID = (WPARAM) link->id();
LPCWSTR name = link->name();
WPARAM index = List_AddStringW(listbox, name);
List_SetItemData(listbox, indexByID, link);
return indexByID;
}

Do kukátka přidám name, index a indexByID a když to ladím tak dostanu nesprávný index, ale indexByID je správně.

takže když indexByID == 5 pak name == "leaves", když indexByID == 10 pak name == "forest" ...
A toto je vpořádku. Proto teď používám tu novější funkci, ale přesto se nevybere ta správná položka.

Pokračuji v ladění. Zobrazí se okno, položky už jsou v listboxu vytvořené a seřazené abecedně.
Do edit boxu musím zadat x,y ... 1 a 1. Pak se zpracuje příslušná zpráva a zavolá metoda co updatuje údaje. A má se vybrat ta správná položka v listboxu:

Kód: [Vybrat]
SendDlgItemMessage(dialog, IDC_TR_ID, LB_SETCURSEL, tn->cnst, 0);
V tomto momentu tn->cnst čili hodnota indexu je správně: unsigned char 0x05 . To odpovádá "leaves".
Toto volání bylo provedeno z LoadMap() poté co jsem volal Map_UpdateCoord(dialog, id).

Následně se zobrazí okno a vidím že se zobrazila nesprávná položka. Ne "leaves" ale "dirt 1" což je myslím index 3.
Nemohu tedy přijít na to jak je to možné že se zobrazuje nesprávná položka. Protože jak jsem to ladil při vytváření toho seznamu, tak všechny hodnoty s tou novou funkcí jsou správné, takže snad se měl ten listbox vytvořit správně. Napadá někoho z vás kde by mohl být zakopaný pes?

15
Vývoj / Re:Jak fungují taby C/C++
« kdy: 29. 06. 2015, 15:59:45 »
Už jsem na to přišel jak to funguje.
Hned na začátku je

Kód: [Vybrat]
DLGPROC procs[NUM_PAGES] =
{
&IMsgsDlgProc,
&PlyDlgProc,
&VictDlgProc,
&DisDlgProc,
&MapDlgProc,
&UnitDlgProc,
&TrigDlgProc
};

Ty procedury jsou ale nadeklarované a nadefinované v jiném souboru - editors.h:
Kód: [Vybrat]
extern struct PropSheetData
{
int pindex; //current player number
class Player *p; //current player struct
int sel0, sel1; //page dependant, should be reset on SETACTIVE
HWND statusbar;
HWND mapview;
HMENU menu;
UINT tformat, ecformat, mcformat; //clipboard formats
} propdata;

INT_PTR CALLBACK IMsgsDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PlyDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK VictDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK DisDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK MapDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK UnitDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK TrigDlgProc(HWND page, UINT msg, WPARAM wParam, LPARAM lParam);

A dále je definice v modulech, např. unitedit.cpp
Kód: [Vybrat]
BOOL Units_HandleInit(HWND dialog)
{
Combo_Fill(dialog, IDC_U_LIST_PLAYERS, Player::names, NUM_PLAYERS);
Combo_Fill(dialog, IDC_U_ROTATE, rotates, NUM_ROTATES);
Combo_Fill(dialog, IDC_U_SORT, sorts, NUM_SORTS);
SendDlgItemMessage(dialog, IDC_U_SORT, CB_SETCURSEL, 0, 0);

LCombo_Fill(dialog, IDC_U_TYPE, esdata.unitgroups.head(), L"All");
UnitList_FillGroup(GetDlgItem(dialog, IDC_U_UNIT), NULL);

//set edit control limits
SendDlgItemMessage(dialog, IDC_U_X, EM_SETLIMITTEXT, 5, 0);
SendDlgItemMessage(dialog, IDC_U_Y, EM_SETLIMITTEXT, 5, 0);

return TRUE;
}

INT_PTR CALLBACK UnitDlgProc(HWND dialog, UINT msg, WPARAM wParam, LPARAM lParam)
{
INT_PTR ret = FALSE;

try
{
switch (msg)
{
case WM_INITDIALOG:
ret = Units_HandleInit(dialog);
break;

case WM_COMMAND:
ret = 0;
Units_HandleCommand(dialog, HIWORD(wParam), LOWORD(wParam), (HWND)lParam);
break;

case WM_NOTIFY:
{
NMHDR *header = (NMHDR*)lParam;
switch (header->code)
{
case PSN_SETACTIVE:
SendDlgItemMessage(
dialog, IDC_U_LIST_PLAYERS, CB_SETCURSEL, propdata.pindex, 0);
Units_Reset(dialog);
break;

case PSN_KILLACTIVE:
Units_Save(dialog);
SendMessage(
propdata.mapview, MAP_UnhighlightPoint, MAP_UNHIGHLIGHT_ALL, 0);
}
}
break;

case WM_VKEYTOITEM:
if (LOWORD(wParam) == VK_DELETE)
Units_HandleDelete(dialog);
ret = -1;
break;

case AOKTS_Loading:
Units_Reset(dialog);
break;

case AOKTS_Saving:
Units_Save(dialog);
break;

case MAP_Click:
Units_HandleMapClick(dialog, LOWORD(lParam), HIWORD(lParam));
break;
}
}
catch (std::exception& ex)
{
// Show a user-friendly message, bug still crash to allow getting all
// the debugging info.
unhandledExceptionAlert(dialog, msg, ex);
throw;
}

return ret;
}


Stran: [1] 2