Laden...
D
Benutzerbeschreibung

Forenbeiträge von deti61 Ingesamt 95 Beiträge

15.11.2006 - 11:25 Uhr

Hi noi76,
so sieht es aus, also ob der Button funktionieren sollte.
Was machst du denn in der OnClick Funktion? Die muss fertig sein, bevor der Timer abläuft.
Mal ausprobieren, ob die Timerfunktion immer aufgerufen wird.
Anonsten mal den Code.
Deti

15.11.2006 - 09:13 Uhr

Hi HIZ,
hast du schon mal nach dem Stichwort "Splashscreen" ( bzw. "Splash screen") gesucht?
Wenn du aber erst deine Anwendung starten willst und dann erst die Bilder laden, ist eine Thread sicherlich keine schlechte Idee.

@blackcoin
was verschwendest du deine Zeit, wenn du keine Antwort geben willst? Ohne ein Stichwort kommt man da nicht weiter.

Deti

14.11.2006 - 13:13 Uhr

Du kannst natürlich bevor du deine Aktion ausführst den Focus selber wechseln ( SetFocus auf ein anderes Control), aber nicht vergessen den Focus auf das urspürüngliche Control zurück zu setzen ( der User wundert sich sonst, warum der Cursor woanders steht).
Das ist die Lösung, die ich benutze. Wenn dann ein Fehler in der Eingabe ist, setzt die Funktion den Focus dann auf das eigene Element. Das bedeutet, dass man den Wert ( die Auswahl oder was auch immer) nur aus Variablen liest, die beim Starten und nach einer Änderung gesetzt werden.
Andere Möglichkeit ist natürlich die Menüs erst frei zu schalten, wenn die Eingabe IO ist.
Deti

14.11.2006 - 11:23 Uhr

Hi gertschi,
was hälst du den Events "Enter" und "Leave"?
Deti

19.10.2006 - 10:42 Uhr

Hi alle,
Ich wollte eine Assembly in den global assembly cache mit "gacutil.exe" übernehmen und bekam immer die Fehlermeldung "Unknown error".
Nach vielen Irrwegen habe ich dann in einem anderem Forum die Lösung gefunden:
Die Datei "gacutil.exe" ist Framework abhängig und ich hatte einen Pfad auf die VisualStudio Version 2003. Ich arbeite aber jetzt mit mit VisualStudio 2005. Somit wurde immer die alte Version benutzt, die aber nicht mit der SDK 2.0 zurecht kommt!
Also Lösung war: den Pfad auf die Version 2005/SDK/2.0/bin setzen

Ich hoffe es erspart anderen die Zeit beim suchen.
Detlef

18.10.2006 - 10:14 Uhr

Hi dutop,
schau mal in diesem Link nach:
ShowWindow

Batchdateien müssen nícht auf das Ende eines Programmes warten ( ich denke der Befehl ist call).
Detlef

11.10.2006 - 12:04 Uhr

Hi Jürgen,
DLLs können auch wieder DLLs einbinden.
Eigentlich ist dein Problem aber ein Datenbankproblem. Schau dir mal diesen Thread dazu an:
Tree(Node) Collection als Zwischenschicht bauen
Auch wenn es zuerst nicht so aussieht, die Antworten von Rainbird über Datentechnologien werden dir hoffentlich helfen.
Detlef

05.09.2006 - 14:37 Uhr

Hi bluecat,
folgende Antworten:

  • den Zustand eines Items bekommt man mit Item.GetItemChecked order GetItemCheckState. Zusätzlich gibt es ja die Collections:
    CheckedItemCollection also die angewählten Items oder
    CheckedIndexCollection die Indizes der gewählten Items.

  • bei deinem Code


                try
                {
                    conn.Open();
                    
                    da.Fill(ds, TableName);

                    DataTable dt2 = ds.Tables[TableName];
                    clb_SpaltenAuswahl.Items.Clear(); // ACHTUNG hier wird gelöscht

Da wird clb_SpaltenAuswahl immer wieder gelöscht! Also die zweite Anwahl löscht die Spalten der ersten Auswahl.

Hoffe das hat geholfen
Deti

05.09.2006 - 13:22 Uhr

Hi bluecat,
ein wenig Code würde helfen. Wie sollen wir erkennen, was du getan hast?
Mfg
Deti

13.06.2006 - 14:51 Uhr

Hi Cali271,
Application.ExecutablePath
Detlef

31.05.2006 - 11:50 Uhr

Hi svenson,

Was das Handshaking angeht, so ist das transparent für die Anwendung. Darum kümmert sich der UART komplett alleine.

Das ist mir neu, aber dann kann er ja nur seinen Minibuffer verwalten. Ich kenne das nur, dass man selber die Leitungen setzt.

Detlef

31.05.2006 - 09:50 Uhr

@svenson
Normalerweise "verschwinden" seit Windows2000 keine Daten mehr von den seriellen Schnittstellen, da man dem Windowstreiber die Buffergröße angeben kann und dann kümmert der sich um das Auslesen des Bausteins). Handshake ist nett, aber meistens können die Leute damit nicht umgehen, denn wer setzt die Leitung und gibt sie wieder frei? Ich kenne das nur, dass man sich darum auch selbst kümmern muss und dann hat man nichts gewonnen ( lasse mich aber gern eines besseren belehren).

@lion
Das Problem mit seriellen Schnittstellen ist immer, dass man nie weiß, ob schon alle Daten da sind oder noch welche kommen, denn wer sagt, dass dein Eventhandler aufgerufen wird, wenn der '*' da ist und schon bei dem 'B' oder so.

Lese doch in deinem Eventhandler die Zeichen aus, speichere diese und wenn ein '' da ist, dekodier diese Daten und speichere sie in einem FiFo ( z.B. Liste).
Das machst du solange, wie du auf einen '
' triffst.
Der Thread oder wer auch immer kann nun in Ruhe aus dem FiFo die Daten auslesen.

Detlef

26.04.2006 - 12:18 Uhr

@svenson
Ich werde es entsprechend umstellen.
Danke
Detlef

26.04.2006 - 11:38 Uhr

Hi svenson,
eigentlich wollte ich eine DLL erstellen.
Detlef

26.04.2006 - 11:14 Uhr

Hallo,
ich habe da mal eine Frage zu COM Servern.
Ich erstelle eine COM Server, der im Hintergrund ein Protokoll auf der seriellen Schnittstelle abarbeitet. Dazu gibt es einen Thread, der die Schnittstelle abfragt und Daten senden soll.
Der COM Client soll also eine Initfunktion aufrufen, in der der Seriellthread gestartet wird und dann müsste der Thread immer im Hintergrund laufen, bis vom Client Exit aufgerufen wird.
So wie ich das sehe, läuft der Thread aber immer nur, wenn der Client auf den COM Server zugreift, ansonsten steht der Thread. Wenn ich das Ganze in einer InprocDLL durchführe, funktioniert es.

Die Frage dazu: Kann eine COM Server DLL einen Thread starten?
Detlef

26.04.2006 - 11:05 Uhr

Hi wpb,
die Frage ist, ob du wirklich Zeiten messen willst oder nur Zeitdifferenzen.
Reale Zeiten geht nicht ( siehe Einwand von herbivore) ansonsten gibt es den Performancecounter, der eine Auflösung von 3 Mhz und besser hat.

Das Ganze mal in C++.


LARGE_INTEGER ilActTime;
static LARGE_INTEGER	m_ilFrequence;

QueryPerformanceCounter( &ilActTime);  // aktueller Counterwert
if( !m_ilFrequence.QuadPart)
	{  // das gibt die aktuelle Frequenz zurueck
	QueryPerformanceFrequency( &m_ilFrequence);
	}

if( m_ilFrequence.QuadPart)
	{
	return( ilActTime.QuadPart / m_ilFrequence.QuadPart);
	}

Detlef

25.04.2006 - 10:15 Uhr

Hi Varrius,
ich weiß nicht, wieviele Connections Access offen halten kann ( es gibt aber eine Begrenzung, da man ja den SQL Server kaufen soll), aber es sind mehrere.
Aber du schließt deine DB nicht mehr, oder?
Form1.database ist keine lokale Variable, sondern bleibt solange bestehen, wie das Form geöffnet ist.
Was spricht dagegen, diese Variable database nur in der Funktion VerleihListeLaden zu erzeugen oder die DB (bzw query) wieder zu schließen?

Detlef

25.04.2006 - 09:29 Uhr

Hi Varrius,
mal ein paar Fragen zum Programm:

  • hast du mehrere Threads?
    wenn ja, vielleicht hast du ein Synchronisationsproblem oder eine andere Funktion ändert deine dbReader
  • das mit try/catch ist sicher richtig
  • haben die anderen Childs auch eine Verbindung zur DB? Eventuell geöffnet ?

Detlef

19.04.2006 - 13:11 Uhr

Hi Brain,
dein Code:


private void btn_EinsatzZeit_Click(object sender, EventArgs e)
{
Timer ZeitVerstrichen = new Timer();
ZeitVerstrichen.Interval = 1000;
ZeitVerstrichen.Enabled = true;
ZeitVerstrichen.Tick += new EventHandler(ZeitVerstrichen_Tick);
}

Erzeugt jedesmal einen neuen Timer ( ZeitVerstreichen, lokal in der Funktion). Mein Vorschlag war, nur einen Timer zu benutzen, der zu dem Formular gehört ( also z.B. über die Entwicklungsumgebung aus der Toolbox einen Timer auf dem Formular erzeugen). Diese Version erzeugt Datenleichen, auf die man nie wieder zugreifen kann ( schließlich ist die Variable ZeitVerstreichen nach der Funktion nicht mehr vorhanden. Der Timer läuft aber weiter ...
Detlef

19.04.2006 - 12:09 Uhr

Hi Brain,
ein paar Fragen:
Warum ist der Timer dynamisch?
Wenn du den Timer nur nach dem Click auf den Button laufen lassen willst, dann setzte Timer1.Enabled = true ( bzw. false) .
Warum nur ein Label?
Die anderen Buttons können doch eigene Labels benutzen?

Mach dir das Leben doch nicht unnötig kompliziert.
Detlef

19.04.2006 - 11:38 Uhr

Hi Brain,
was hälst du von einem Stück Code?
Detlef

19.04.2006 - 11:05 Uhr

Hi Brain,

  1. nimm aus der Toolboxleise einen Timer.
  2. Lege ihn auf dein Formular.
  3. Setze die Eigenschaften:
    enabled auf true
    Interval auf 1000
  4. Doppelclicke den Timer -> da öffnet sich dann die Timerfunction.

private void timer1_Tick( object sender, EventArgs e )
{
// hier schreibe nun deine Code hinein.
}

  1. übersetze das Programm
  2. prüfe, ob Fehler angezeigt werden
    wenn ja weiter mit 7
    wenn nein weiter mit 8
  3. korrigiere die Fehler
    weiter mit 5
  4. führe das Programm aus.

Das sollte es sein
Und ansonsten bitte genauere Fehlerbeschreibungen!

Detlef

03.04.2006 - 13:29 Uhr

Hi svenson,
habe ich jetzt auch gelesen.
Ein Feature, was ich dann vielleicht in der Zukunft benutzen werde.
Der Mensch ist doch ein Gewohnheitstier, und da kennt man eben nur #ifdef von C++.
Danke
Detlef

03.04.2006 - 11:27 Uhr

Hi Thomas,
es geht!

Ich dachte aber, ich hätte es auch so ausprobiert. Manchmal spielt einem das Gedächnis einen Streich...
Detlef

03.04.2006 - 10:42 Uhr

Hi bonnet,
das geht natürlich, aber:
es gibt ja nun keine Headerfiles mehr, sodass solche Änderungen nicht einfach in anderen Dateien benutzt werden können.

Das Ziel sollte sein, durch eine einfache Änderung in der Configuration ( nicht nur Debug/ Release, sondern zusätzliches Projekt "MitMessung") die Ausgabe zu beeinflußen.

Detlef

03.04.2006 - 09:41 Uhr

Hi all,
ich habe ein "kleines" Problem mit der Definition von Compiler Konstanten in VS 2005.
Ich möchte ein Teil des Codes nur benutzen, wenn eine Konstante definiert ist.
Also:


#if MY_CONSTANT
tu etwas
#else
#endif

Sollte eigentlich einfach sein:
Projekt/Properties/Build/Conditional compilation symbols:
Dort eintragen: "/define:MY_CONSTANT"
Geht aber nicht.

Kennt jemand eine Lösung?
Detlef

16.03.2006 - 17:05 Uhr

Hi Haggy,
schon mal an eine Scriptsprache ( z.B. IronPython) gedacht?
Detlef

www.seatec-gmbh.com

13.02.2006 - 15:00 Uhr

Hi vitalinka,
um soetwas zu testen eignet sich ganz gut VMWare. Mit der Version aus der ct' bekommt man sogar die ältere Version ein Jahr lang zum testen ( ansonsten nur 1 Monat).
Dort bekommst du dann einen "leeren" PC, installierst ein Windows ( achtung: Lizenz) und setzt einen "SnapShot". Nur so kann man testen, ob Programme auf anderen Systemen laufen ( und mit dem Snapshot hat man innerhalb von 1 Minute wieder ein leeres System).
Detlef

13.02.2006 - 13:17 Uhr

Hi slig,
hast du es schon mal mit IronPython ironpython.orgprobiert?
Das ist ein Pythoninterpreter, der in C# eingebunden ist, und mit dem man dann auf aktuelle Objekte zugreifen kann.
Oder reicht dir deine Lösung?
Detlef

09.02.2006 - 13:56 Uhr

Was hälst du denn vom Thema:
Access and C#
Dort wird eigentlich darauf eingegangen, wie man SQL Statements ausführt.
Ansonsten war die Frage:

Kann mir jemand sagen, wie ich nun SQL- Abfragen ausführe? Gibt es gute Tutorials, Internet-Seiten zum Thema?

Und dafür war die SQL Seite gut. Hier treffen unterschiedliche Frage( und Antwort) Level aufeinander. Man weiß nie, was man bei dem Frager voraussetzen kann.
Viel Spaß noch
Detlef

09.02.2006 - 13:22 Uhr

Hallo GNewmann,
die Frage ist, was du suchst:

  1. Wenn du keine Ahnung von Datenbanken hast, dann erst einmal damit anfangen ( was ist eine Datenbank, was eine Abfrage und so weiter)

  2. Wenn du eine Abfrage in einer vorhandenen Datenbank durchführen willst
    Dann kann man die Abfrage sich im Access zusammen klicken und dann den SQL Code kopieren.😉. Man kann diesen Code auch im Access ändern.

  3. Ansonsten hilft google.de "SQL tutorial". Da kommen ein paar nette Seiten.

Detlef

17.01.2006 - 07:55 Uhr

Hi veasel,
wenn du Zugriff auf das Verzeichnis hast, kannst du da nicht auf Änderungen im Verzeichnis triggern? Wenn die neuen Dateien da sind, diese wegschreiben?

Mal so nebenbei, zu HOFFEN das die User dann noch nicht mit den Dateien arbeiten, wird schief gehen! Nicht jetzt und heute, aber ...

Detlef

12.01.2006 - 15:45 Uhr

Hi Petra,
was hälst du davon in VS ein Setupprojekt zu erstellen und dieses dann von Installshield aufzurufen?
Was hälst du der folgenden Seite:
Installsite
bzw folgender Newsgroup
microsoft.public.de.german.entwickler.windows.installer

Detlef

12.01.2006 - 15:30 Uhr

Hi all,
es gibt ja nun diese CodeSnippets.
Kann man mit diesen auch den aktuellen Dateinamen oder Datum eintragen?
Oder Makros aufrufen?

Detlef

12.01.2006 - 10:15 Uhr

Hi,
erzeuge ein Deployment Projekt und prüfe, was das alles installiert.
Wenn das Zielsystem bei dir steht und über Netzwerk verbunden ist:
Erzeuge eine EXE und kopiere sie auf dem Zielsystem.
dann sagt das Programm, was es braucht; dll dazu kopieren, erneut starten.

  1. Start die EXE
  2. kopiere die DLL, die als fehlend angezeigt wird in das Programmverzeichnis
  3. weiter mit 1. solange bis Programm fehlerfrei startet.

Gehe davon aus, dass das länger dauert, als die Einarbeitung in ein Deploymentprojekt.

Detlef

12.01.2006 - 09:32 Uhr

Hi suamikim,
bei der Installation von VS werden die ganzen Runtime Libraries/ Net Framework und was sonst noch alles mitinstalliert.
Die sind natürlich nicht da, wenn kein VS installiert ist. Deine DLL greift auf Resourcen von VS zu, also müssen diese installiert werden ( z.B. Net Framework).
Schließlich sind die Programme so schön klein, weil viel Funktionalität in Standard DLLs versteckt ist.

Nun die Frage welche Resourcen?
Da gibt es mehrere Möglichkeiten:

  • der harte Weg, wie von FZelle vorgeschlagen die Abhängigkeiten in der DLL verfolgen ( das kann aber lang werden)
  • der Mittelweg
    Einfach Mal in die Doku gucken, was Microsoft so mein, was man mitgeben muss
  • der leichte Weg
    Ein Installationsprojekt erstellen ( in der Projektmappe des Urspungsprojektes). Dieses Installationsprogramm muss dann auf dem Zielrechner ausgeführt werden.

Dann stellt sich immer wieder die Frage, wie teste ich die Installation?
Da gibt es auch mehrer Möglichkeiten:

  • ein extra Rechner mit installiertem Windows ( ACHTUNG Zielversion ), aber sonst nichts. Und diesen nach jeder Installation mit Ghost oder einem anderem Imager wieder platt machen
  • eine Installation von VMWare ( oder anderem VirtualPC).
    Auf diesem PC dann die Installation ausführen und testen, ob das Programm läuft.
    Dabei ist zu beachten, dass die Zielplatform möglichst genau simuliert wird ( also nicht auf XP installieren, wenn das Ziel Windows 2000 ist).
11.01.2006 - 14:08 Uhr

Hi ikaros,
jeder sollte schon wissen was er tut.
Detlef

11.01.2006 - 13:30 Uhr

Hi dexter,
anstatt einer extra Schnittstellenkarte kann man auch einen embedded Controller nehmen ( z.B. Beck IPC, USB-DIO Accesc IO). Diesem gibt man dann die Schrittfrequenz vor und er macht die in Hardware.
Ansonsten ist bei 1 ms Schluß mit lustig.
Bei deiner Softwarelösung kann man natürlich mit dem HighPerformance Counter die Zeitauflösung verbessern.
Detlef

11.01.2006 - 13:22 Uhr

Hi ThePaul,
es ist meistens nicht sinnvoll alle Pixel zu nehmen. Versuche mal, nur jedes vierte Pixel in jeder vierten Zeile ( schon geht alles schneller).
Detlef

21.12.2005 - 10:14 Uhr

Hi norman_timo,
das Problem ist dann aber noch der Compiler. Der fügt dann aus Angst ( weil er ja nicht weiß, was man will) ein Clear von dem Register ein ( und schon wieder ein Befehl mehr).
Das ist im Normalfall kein Problem ( weil die Rechner sind schnell genug), aber das gilt auch anders herum, es macht keinen Sinn, in einem Programm aus welchem Grund auch immer, nicht int oder double zu benutzen, Speicher hat man auch genug. Man halst dem Prozessor nur mehr arbeit auf ( Konvertierung).
In einer Struktur, die über langsame Medien verteilt wird, ist das wieder was anderes.
Detlef

21.12.2005 - 08:42 Uhr

Hi herbivore,
alle meine Aussagen sind nur Halbwissen! Wann hat man das letzte Mal in ein Prozessorhandbuch geschaut ( bei mir beim P I und 68040, also lange her) oder den Assembleroutput vom Compiler sich angesehen.
Aber ich denke, dass die normalen Befehle auf die langen IEEE Formate ausgerichtet sind ( weil größer ist besser).
Es kommt natürlich auch auf den Compiler an, was der daraus macht. Wenn man z.B. ein Byte zuweist, wird zuerst das ganze Register gelöscht und dann die Zuweisung ausgeführt. Macht man das Ganze mit einem Int, dann wird sich das Löschen gespart und der Wert direkt zugewiesen.
Daraus also meine Erkenntnis, die sich aber auf Desktopprozessoren beziehen. Bei Micocontrollern ist wieder alles ganz anders, da kann eine Floatoperation auch mal 1 ms dauern, aber dann macht man was falsch.
Detlef

21.12.2005 - 08:09 Uhr

Hi sharp_noob,
zwei Anmerkungen:

  1. warum float und nicht double ? Hat eine höhere Genauigkeit und geht meines Erachtens auch schneller ( da das Format des Prozessors). Du nimmst ja auch int und nicht int16.
  2. Der Code ist zwar nicht kopiert, aber beim Teilen durch 2 lieber durch 2. oder (double)2 teilen, damit nicht aus versehen eine Integerdivision daraus wird.
    Detlef
20.12.2005 - 10:11 Uhr

Hi Stropher,
ja, so sollte das funktionieren ( mit der Einschränkung, dass die Funktionen alle zum gleichen Formular gehören). Dann bist du fertig.
Wenn die Controls aber nicht zum gleichen Formular gehören, dann bitte im Forum nach Invoke suchen.
Detlef

14.12.2005 - 09:57 Uhr

@Programmierhans
Geile Seite.
Detlef

11.10.2005 - 15:49 Uhr

Hi Curse4Life,
wann bekommst du den Fehler ( beim Compilieren oder beim Ablauf)?
In welcher Zeile?
Welche Fehlernummer?

Detlef

11.10.2005 - 07:53 Uhr

Hi ThreeD,
kannst du die Daten aus den Controls auch zwischenspeichern?
Wenn man den Ansatz dahingehend ändert, dass es Daten gibt, die bearbeitet und angezeigt werden:
Bearbeitet:
von threads
von den Controls
Angezeigt
von den Controls
Dann kann man den Zugriff auf diese Daten synchronisieren und da diese Daten nur einmal angezeigt werden, kann die Anzeige durch einen eigenen Timer mit synchronisiertem Zugriff erfolgen.
Das Anzeigen ist eine untergeordnete Funktion und darf das Verarbeiten der Daten nicht stören.
Es werden häufig Controls ( TreeView, ListView, Grids oder ähnliches) für die Speicherung von Daten benutzt. Dann begibt man sich aber in eine Abhängigkeit von der Darstellungsgeschwindigkeit.

Detlef

07.10.2005 - 09:08 Uhr

Hi Lucifer,
ganz einfach.
Erstelle mal ein statisches Menü. Verknüpfe dessen Einträge mit deiner Funktion. Schau nach was die IDE gemacht hat. Und das musst du auch durchführen, wenn du deine dynamischen Menüs erzeugts.
Der Vorteil ist, du kannst auch so zuerst deine Funktion(en) testen und später die zusätzlichen Probleme durch die Dynamik lösen.
Detlef

07.10.2005 - 07:45 Uhr

Hi Wizzard,
und warum definierst du nicht


[DllImport("test.dll", EntryPoint="test")]
public static extern int test( string test); 

?
Ansonsten gibt es schon viele Threads zu übergabe an DLL Funktionen.
Detlef

07.10.2005 - 07:40 Uhr

Hi jofenchel,
ein altes Problem der Terminaleingabe.
Das Read liest nur das erste Zeichen aus, du hast aber dein 'I' mit <Enter> bestätigt? Das steht jetzt noch im Buffer und wird vom ersten Readline ausgelesen. Und damit läuft das Programm weiter.
Hinweis:
Wenn du hier eine falsche Eingabe machst, kannst du diese nicht korrigieren. Vielleicht besser in einer Schleife auslesen, bis wirklich 'I' oder 'C' kommt.

Detlef

07.10.2005 - 07:36 Uhr

Hi Kostas,
das Ganze ist doch ein Datenbankproblem. Schon dort ist es entsprechend gelöst ( über Tabellen und verknüpfte Daten).
Ich weiß nicht was du für Bücher gekauft hast, aber waren die von Scott Meyers dabei ( Effective C++; More effective C++, gibt es auch in deutsch)? Der geht schon auf Designdetails ein.
Mit der Erfahrung wächst auch das Designverständnis ( sprich man merkt, wenn etwas unhandlich ist). Und man muss unterscheiden zwischen Arbeitsaufwand und Wartungsaufwand.
Meiner Meinung nach ist, neben vernüpftigem Design, die Kommentierung des Codes viel wichtiger.
Viel Spaß
Detlef