 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 21.07.2007, 20:21 Titel: [WinAPI] Textfelder |
|
|
Da ich den Abschnitt in Lutzifer's Tut über Buttons (4.5-4.6) nicht verstehe, wollte ich fragen ob mir das einer mal erklären könnte wie man das macht.
[|30!7|]
Hat sich erledigt.
Kann mir aber jemand das mit Textfeldern & Co. erklären?
[/|30!7|] _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 22.07.2007, 00:50 Titel: |
|
|
Gemeint sind "oneliner", die die man z.B. mit einem Code: | <input type="text"> | herrvorruft.
Wie erstellt man die, wie kommt man an den eingegebenen Text?
(€dit):
Mit einem
Code: | hText = CreateWindow("edit", "Balr",_
ES_LEFT or WS_VISIBLE or WS_CHILD,_
10, 150, 70,20, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL) | Erstelle ich schonmal ein teil wo ich mit den cursor reinkann, kann aber nichts editieren  _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 22.07.2007, 01:14 Titel: |
|
|
Code: | hText = CreateWindowEx(WS_EX_CLIENTEDGE, _
"edit", _
"blarlala", _
WS_CHILD or WS_VISIBLE or ES_LEFT, _
20, 200, 200, 20, _
hWnd, _
NULL, _
cast(LPCREATESTRUCT,lParam)->hInstance, _
NULL) | Macht alles richtig bis auf. *capslockdrück*ICH KANN NICHTS REINSCHREIBEN!!!!!!*capslockdrück*  _________________ If hilfreicher_Beitrag then klick(location.here)
Klick
Zuletzt bearbeitet von csde_rats am 22.07.2007, 12:23, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 22.07.2007, 09:03 Titel: |
|
|
ist halt für Assembler:
Code: | invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
ES_AUTOHSCROLL,\
50,35,200,25,hWnd,EditID,hInstance,NULL
mov hwndEdit,eax
.ENDIF
.IF uMsg==WM_DESTROY
invoke GetWindowText,hwndEdit,ADDR buffer,512
invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
invoke PostQuitMessage,NULL |
Das gibt den Text beim Schliessen in der MessageBox aus. In FB weiss ich nicht gut wie die API-Funktionen aufrufen. _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 22.07.2007, 11:19 Titel: |
|
|
mom
Code: | invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
ES_AUTOHSCROLL,\
50,35,200,25,hWnd,EditID,hInstance,NULL
mov hwndEdit,eax
.ENDIF
.IF uMsg==WM_DESTROY
invoke GetWindowTexthwndEdit,ADDR buffer,512
invoke MessageBox,NULL,ADDR buffer,ADDR AppName,MB_OK
invoke PostQuitMessage,NULL |
==>>
Code: | dim as string buffer
hText = CreateWindowEx(WS_EX_CLIENTEDGE, _
"edit", _
"blarlala", _
WS_CHILD or WS_VISIBLE or ES_LEFT, _'ES_LEFT,
300, 300, 200, 20, _
hWnd, _
NULL, _
cast(LPCREATESTRUCT,lParam)->hInstance, _
NULL)
GetWindowText hText,buffer,512
print buffer | Sollte den Inhalt in die Konsole geben. tut er aber net
/€dit:
Code: | GetWindowText hText,buffer,512
MessageBox NULL, buffer,"LOL",MB_OK |
gibt mir ne leere MsgBox aus  _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 22.07.2007, 20:47 Titel: |
|
|
Wenn ich das richtig sehe dann wird die MessageBox erscheinen gleich nachdem das EDIT erstellt wurde? In dem Fall ist ja klar ist sie leer, da hast Du ja gar keine Zeit etwas einzugeben... Aus dem Grund habe ich die Ausgabe in WM_DESTROY gelegt (ist das einfachste), man könnte dafür natürlich auch einen Button nehmen. Aber in WM_CREATE kann es kaum gehen das wird ja gleich aufgerufen und der COde abgearbeitet _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 22.07.2007, 20:48 Titel: |
|
|
nein das kanns net sein, die messagebox wird bei wm_close angezeigt, und vorher der text gelesen.
mein prob ist noch ein ganz anderes:
wenn ich mit der Maus reinklicke, müsste ich ja was reinschreiben können; es verhält sich aber wie ein ES_READONLY feld.
kann das von fb (0.18 cvs) abhängig sein? _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 22.07.2007, 20:56 Titel: |
|
|
Ah sooo, glaube kaum dass das vom Compiler abhängt. Ich hab zuerst mit C etwas WinAPI probiert und da hatte ich das Problem auch, oder dass sich das Programm schön beendete sobald ich in das EDIT klickte. Die Ursache war da ein fehlendes return 0 oder falsche endif, am falschen Ort. Ist bei ASM auch, wobei mir das irgendwie weniger heikel scheint (und sowieso einfacher als C, in ASM weiss ich wie man strings deklariert, in C bis heute nicht) Würde diese Dinge mal prüfen; ich kam auch lange nicht dahinter dass das sowas ist. _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 22.07.2007, 21:00 Titel: |
|
|
*0.17-drüberinstallier-edit-kommt-gleich*
/€dit:
funzt net:
Code: | #include "windows.bi"
const ProgrammName = "Blar"
declare function Fenster(byval hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
dim as WNDCLASS wcMeinFenster
with wcMeinFenster
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = ProcPtr(Fenster)
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = GetModuleHandle(NULL)
.hCursor = LoadCursor(NULL, IDC_ARROW)
.hIcon = LoadIcon(NULL, IDI_APPLICATION)
.hbrBackground = GetStockObject(WHITE_BRUSH)
.lpszClassName = StrPtr(ProgrammName)
.lpszMenuName = NULL
end with
RegisterClass @wcMeinFenster
dim as HWND hMeinFenster = CreateWindow(_
ProgrammName, "TTS", WS_OVERLAPPEDWINDOW,_
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,_
NULL, NULL, GetModuleHandle(NULL), NULL)
ShowWindow hMeinFenster, SW_NORMAL
UpdateWindow hMeinFenster
dim as MSG msg
do while getmessage(@msg, NULL, 0, 0) <> 0
DispatchMessage @msg
loop
end msg.wParam
function Fenster(byval hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
static as hwnd hText
select case message
case WM_DESTROY
PostQuitMessage 0
return 0
case WM_CREATE
hText = CreateWindowEx(WS_EX_CLIENTEDGE,_
"edit", _
"SCheiss Textfeld", _
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT, _
300, 300, 200, 200, _
hWnd, _
NULL, _
cast(LPCREATESTRUCT,lParam)->hInstance, _
NULL)
return 0
end select
return DefWindowProc(hWnd, message, wParam, lParam)
end function
|
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick
Zuletzt bearbeitet von csde_rats am 22.07.2007, 21:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 22.07.2007, 21:00 Titel: |
|
|
Darf ich mich reinhängen?
Strings in C gibt's so konkret eigentlich nicht. Das ist dann nur ein Array von Chars.
Beispiel:
Code: |
#include <stdio.h>
int main (int argc, char *argv[])
{
char hello[]="Hello World!\n";
printf("%s", hello);
return 0
}
|
_________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 22.07.2007, 21:12 Titel: |
|
|
Ja das mit den Strings in C ist mir bekannt; doch es gibt (aber mir unbekannte?) Definitionen je nach Compiler wenn ich mich nicht irre...
Hmm ist das der ganze Code? Wie gesagt in FB habe ich noch nie (erfolgreich) mit der WinAPI etwas gemacht, scheint mir eigenartig irgendwie fehlt die Nachrichtenbehandlung? Hier mal ein C-Code (der geht):
Code: | #include <windows.h>
#ifdef __BORLANDC__
#pragma argsused
#endif
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
const char szAppName[] = "Ein eigenes Fenster mit Text und Button";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
RegisterClass(&wc);
hWnd = CreateWindow(szAppName,
"Titelleiste :-p",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, /* X-Position auf dem Monitor */
CW_USEDEFAULT, /* Y-Position auf dem Monitor */
CW_USEDEFAULT, /* Fensterbreite */
CW_USEDEFAULT, /* Fensterhoehe */
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{ TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hButton; //Buttons
static HWND hButton2;
switch (message)
{
case WM_CREATE: //Buttons
{
hButton = CreateWindow( "button",
"juhee :-D",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
hButton2 = CreateWindow( "button",
"Beenden",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
return 0;
}
case WM_SIZE:
{
MoveWindow(hButton, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 30,
160, 22, TRUE);
MoveWindow(hButton2, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 60,
160, 22, TRUE);
return 0;
}
case WM_COMMAND:
{
if (lParam == (LPARAM)hButton)
{
if (HIWORD(wParam) == BN_CLICKED)
MessageBox (0, "Hoi :-D", "Hoi", 64);
}
if (lParam == (LPARAM)hButton2) //Button2
{
if (HIWORD(wParam) == BN_CLICKED)
MessageBox (0, "Chasch denn guet klicke", "Super! ", 64);
int Antwort=MessageBox (0, "Zuemache !?", "Super! ",MB_ICONERROR| MB_YESNO);
{
if (IDYES==Antwort)
MessageBox (0, "Denn halt :-p", "OK", MB_ICONWARNING);
}
if (IDYES==Antwort) {
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
}
return 0;
}
case WM_PAINT: //Text
{
PAINTSTRUCT ps;
HDC hDC;
const char szText[] = "Hallo, dies ist der Text.";
const char szText2[]="Das isch nomol e Text!!!";
hDC = BeginPaint(hWnd, &ps);
{
TextOut(hDC, 50, 50, szText, sizeof(szText) - 1);
TextOut (hDC, 90, 90, szText2, sizeof(szText2) -1);
}
EndPaint(hWnd, &ps);
return 0; // ENDE neu Text
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
|
Vielleicht kannst Du da was draus lesen; ist aber nicht der perfekteste Code (hat übrigens kein EDIT).
Hier einer mit EDITs, ich wollte die Eingaben in integer umwandeln aber das habe ich bis jetzt nicht geschafft: (der folgende Code funktioniert nicht, irgend ein kleiner Fehler, wird gar nicht kompiliert)
Code: | #include <windows.h>
#include <stdio.h>
#include <stdlib.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wc;
const char szAppName[] = "Editcontrol Tutorial";
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = szAppName;
RegisterClass(&wc);
hWnd = CreateWindow( szAppName,
"Editcontrol Tutorial",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL );
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{int a;
static HWND hEdit;
static HWND hEdit2;
static HWND hButton;
switch (message)
{
case WM_CREATE:
{
char *buffer2 = NULL;
char *buffer = NULL;
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
"edit",
buffer, // <- das ist der Inhalt der Editfelds
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
ES_AUTOVSCROLL,
0, 0, 0, 0, //Koordinaten anstelle MoveWindow
hWnd,
NULL,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
//free(buffer);
hEdit2 = CreateWindowEx(WS_EX_CLIENTEDGE,
"edit",
buffer2, // <- das ist der Inhalt der Editfelds
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE |
ES_AUTOVSCROLL,
0, 0, 0, 0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
// free(buffer2);
hButton = CreateWindow( "button",
"los",
WS_CHILD | WS_VISIBLE,
0, 0, 0, 0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam) -> hInstance,
NULL);
return 0;
}
case WM_SIZE:
{
MoveWindow(hEdit, 0, 0, 90, 20, TRUE);
MoveWindow(hEdit2, 100, 100, 90, 20, TRUE);
MoveWindow(hButton, LOWORD(lParam) / 2 - 80, HIWORD(lParam) - 30,
160, 22, TRUE);
return 0;
}
case WM_COMMAND:
{
if (lParam == (LPARAM)hButton)
{
if (HIWORD(wParam) == BN_CLICKED)
a = atoi( buffer );
MessageBox (0, "Hoi", ":D", 64);
return 0;
}
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
} |
_________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 23.07.2007, 20:20 Titel: |
|
|
Och ja stimmt dort ist das doch vorhanden; close fand ich aber nicht. ABer weiss nicht, in FB ist mir WinAPI zu ungewohnt; ist halt schon überall etwas anders. _________________ ...längre blomstre gamle nord... |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|