home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / starview / doc / helpme.txt next >
Text File  |  1992-07-31  |  10KB  |  224 lines

  1. HELPME.TXT - Antworten auf allgemeine Fragen zu StarView
  2. --------------------------------------------------------
  3.  
  4. StarView - Allgemein
  5. --------------------
  6.  
  7. F: Ich verwende einen Link-Handler und meine Applikation bricht ab.
  8. A: Da bei der Verwendung eines Links ein Typecast durchgeführt wird,
  9.    kann der Compiler keine Überprüfung der aufgerufenen Methode
  10.    durchführen.
  11.    Folgende Punkte sollten bei der Verwendung eines Links beachtet werden:
  12.      - Jede Methode, die mit einem Link verwendet wird, erhält als
  13.        Argument einen Zeiger auf das aufrufende Objekt.
  14.        Beispiel. Win::ClickHdl( Button* pButton );
  15.      - Jede Methode, die mit einem Link verwendet wird, kann als Ergebnis
  16.        nur einen Wert vom Typ long liefern.
  17.      - Bei Compilern auf verschiedenen Systemen können bestimmte
  18.        Einschränkungen bei der Verwendung von Links bestehen. So sollten
  19.        Links nicht auf Inline- und virtuelle Methoden zeigen. Weiterhin
  20.        kann es bei Klassen mit Mehrfachvererbung zu Problemen führen
  21.  
  22.  
  23. F: Ich möchte einen String aus der Resource laden, obwohl es in der
  24.    Klasse String keinen Resource-Konstruktor gibt.
  25. A: Die ResId kann über einen String-Operator einen String aus der
  26.    Resource laden. Beispiel: String aStr( ResId( 4711 ) );
  27.  
  28.  
  29. F: Ich möchte einen Warte-Mauszeiger anzeigen, da ich eine größere
  30.    Operation durchführe. Leider wird der Mauszeiger nur umgeschaltet,
  31.    wenn sich der Mauszeiger über dem Fenster befindet, in den ich
  32.    den Pointer selektiere.
  33. A: Um dem Anwender Ihrer Anwendung anzuzeigen, das die Applikation
  34.    derzeit keine Eingaben entgegen nehmen kann, sollten Sie die
  35.    Methode Application::Wait() aufrufen. Auf nicht Multitasking
  36.    fähigen Systemen (Windows 3.x) wird der Wartecursor sofort
  37.    umgeschaltet, da das System solange stillgelegt ist, bis Sie
  38.    die Handler verlassen haben oder Application::Reschedule()
  39.    aufrufen. Auf Multitasking fähigen Systemen (X-Windows) wird
  40.    der Wartecursor nur innerhalb der Applikation angezeigt.
  41.  
  42.  
  43. F: Mein Programm stürzt beim Programmstart ab. Woran könnte es liegen ?
  44. A: Die häufigste Fehlerursache ist, daß globale StarView-Instanzen
  45.    angelegt werden. Da die Konstruktoren der globalen Instanzen vor der
  46.    Initialisierung von StarView aufgerufen werden, gibt es Programm-
  47.    abbrüche beim Starten der Applikation. Da die Applikationsinstanz
  48.    global angelegt wird (die einzige Ausnahme), darf Ihre abgeleitete
  49.    Applikationsklasse auch keine StarView-Klassen als Member haben. Sie
  50.    sollten in diesem Fall nur Pointer als Member haben und die Instanzen
  51.    in Main() anlegen.
  52.  
  53.  
  54. F: Ich will eine Toolbox schreiben, die nicht den Focus bekommt,
  55.    wenn ich mit der Maus in das Fenster klicke und das frei
  56.    verschiebar ist.
  57. A: Dieser Fenstertyp wird nicht von StarView und nicht von den
  58.    Fenstersystemen unterstützt. Z.B. gibt es unter Windows keine
  59.    Fenster, die nicht aktiv werden, wenn man in das Fenster klickt.
  60.    Was unterstützt wird, ist ein Fenster innerhalb einer
  61.    MDI-Applikation das als Parent das Applikationsfenster hat. Das
  62.    Fenster sollte am Rand des Applikationsfenster positioniert werden:
  63.  
  64.         class ToolBar : public Window
  65.         {
  66.         public:
  67.             ToolBar() : Window( pApp->GetAppWindow(), WinBits( 0 ) ) {}
  68.             ...
  69.         };
  70.  
  71.         void AppWin::Resize()
  72.         {
  73.             // Da das Fenster nicht frei verschiebar ist, wird es
  74.             // am linken Rand des Applikationsfensters positioniert.
  75.             pToolBar->
  76.                 ChangeSizePixel( Size( pToolBar->GetSizePixel().Width(),
  77.                                        GetOutputSizePixel().Height() ) );
  78.         }
  79.  
  80.  
  81. F: ???
  82. A: Viele Fragen können auch im systemabhängigen Teil beantwortet sein,
  83.    wobei viele Antworten auch für andere Systeme zutreffen. Deshalb
  84.    sollten Sie auch die systemabhängigen Teile durchlesen.
  85.  
  86.  
  87. StarView für Windows
  88. --------------------
  89.  
  90. F: Ich möchte eine FileOpen-Dialogbox implementieren. Leider gibt es in
  91.    StarView keine Unterstützung vom Filesystem.
  92. A: In dieser Version unterstützt StarView nicht das Filesystem. Um den
  93.    FileDialog von Windows 3.1 zu benutzen, können Sie das Programm
  94.    \EXAMPLES\FILEDLG verwenden, das auch den Einsatz der Sysdepen-
  95.    Klasse demonstiert. Für Datei Ein- und Ausgabefunktionen sollten Sie
  96.    die Streams benutzen. Für die Verzeichnisanzeige sollten Sie Sich
  97.    folgendermaßen helfen:
  98.  
  99.         #include <sysdep.hxx>
  100.  
  101.         void MyListBox::InsertDir( const String& rPfad )
  102.         {
  103.             SendMessage( Sysdepen::GethWnd( *this ),  // Windowhandle
  104.                          LB_DIR, // Verzeichnis
  105.                          0,      // Attribute (Windows-Referenz: DlgDirList)
  106.                          (long)(const char*)rPfad );  // Pfad inkl. WildCards
  107.         }
  108.  
  109.  
  110. F: Wenn ich den KeyInput-Handler überlagere, kann ich die Applikation
  111.    unter Windows nicht mehr über Alt+F4 beeenden oder über die Alt-Tasten
  112.    das Menü aktivieren.
  113. A: Da an den KeyInput-Handler alle Tasten übergeben werden, müssen Sie
  114.    die Tasten auswerten, die Sie in Ihrem Programm verwenden. Alle
  115.    anderen KeyEvents müssen Sie an das System weiterleiten, in dem
  116.    Sie den KeyInput-Handler der Basisklasse rufen:
  117.  
  118.         class MyWindow : public WorkWindow
  119.         {
  120.             ...
  121.             void KeyInput( const KeyEvent& rEvt );
  122.             ...
  123.         };
  124.  
  125.         void MyEdit::KeyInput( const KeyEvent& rEvt )
  126.         {
  127.             switch ( rEvt.GetKeyCode().GetCode() )
  128.             {
  129.                 case KEY_LEFT:
  130.                     ...
  131.                     break;
  132.                 ...
  133.                 default:
  134.                     // Zeichencode ohne Alt-Taste
  135.                     if ( !rEvt.IsMod2() && rEvt.GetCharCode() )
  136.                         ...
  137.                     else
  138.                         WorkWindow::KeyInput( rEvt );
  139.             }
  140.         }
  141.  
  142.  
  143. F: Ich habe den KeyInput-Handler vom SingleLineEdit aufgerufen und
  144.    einen eigenen KeyEvent übergeben. Das Editfeld bekommt leider
  145.    nicht die Taste.
  146. A: Da haben Sie leider recht. Dies ist ein Problem, wofür wir
  147.    noch keine Lösung habem. Dieses Problem gilt auch für
  148.    alle anderen Controls und auch für die Maus-Handler.
  149.  
  150.  
  151. F: Damit der Benutzer bei falscher Eingabe nicht das Editfeld verlassen
  152.    kann, habe ich im LooseFocus-Handler eine Prüfroutine implementiert,
  153.    die im Fehlerfall den Focus wieder auf das Editfeld setzt. Dabei
  154.    kam die Focussteuerung leider durcheinander.
  155. A: Dabei kommt leider Windows durcheinander. Was von StarView
  156.    angeboten wird, ist folgende Lösung:
  157.  
  158.         class MyEdit : public SingleLineEdit
  159.         {
  160.             ...
  161.             void KeyInput( const KeyEvent& rEvt );
  162.             ...
  163.         };
  164.  
  165.         void MyEdit::KeyInput( const KeyEbent& rEvt )
  166.         {
  167.             // Umlaute dürfen nicht eingegeben werden
  168.             if ( (unsigned char)rEvt.GetCharCode() > 127 )
  169.                 Sound::Beep();
  170.             else
  171.                 // Alle anderen Tasten an das Editfeld weiterleiten
  172.                 SingleLineEdit::KeyInput( rEvt );
  173.         }
  174.  
  175.    Normalerweise wird die Prüfung auf gültige Eingaben im Click-Handler
  176.    des OK-Buttons durchgeführt. Diese Lösung hat gegenüber Ihrer Lösung
  177.    den Vorteil, daß der Anwender den Cancel-Button aktivieren kann und
  178.    noch in andere Applikationen wechseln kann.
  179.  
  180.  
  181. F: Unter Windows ist es möglich, Edit-Controls ein Flag für Paßwort-
  182.    eingabe zu übergeben. Dies ist in StarView nicht möglich. Wie
  183.    kann ich dies auch zur Not systemabhängig implementieren ?
  184. A: StarView bietet über die Sysdepen-Klasse die Möglichkeit an, auf
  185.    Window-Handles zurückzugreifen. Damit ist es möglich, verschiedene
  186.    Windows-Funktionen systemabhängig zu nutzen:
  187.  
  188.         SetWindowLong( Sysdepen::GethWnd( aMyWin ), GWL_STYLE, ... );
  189.         GetWindowWord( Sysdepen::GethWnd( aMyWin ), GWW_ID );
  190.  
  191.    Falls Ihnen noch verschiedene Funktionen in StarView fehlen, teilen
  192.    Sie uns das bitte weiterhin mit, da StarView auch in Zukunft um
  193.    neue Funktionen erweitert wird.
  194.  
  195.  
  196. F: Unter Windows ist die Speicherverwaltung kompliziert zu benutzen. Wie
  197.    wird unter StarView der Speicher verwaltet oder muß ich die Windows-
  198.    Funktionen benutzen.
  199. A: StarView benutzt einen eigenen Memory-Manager, der das new und delete
  200.    des C++-Compilers ersetzt. Lesen Sie bitte dazu den Punkt Wichtige
  201.    Informationen in der Datei README.TXT.
  202.  
  203.  
  204. F: Wenn ich den Resource Compiler aufrufe, bekomme ich die Fehlermeldung,
  205.    das der Compiler nicht genuegend Speicher hat.
  206. A: Falls Sie den Borland-Compiler benutzen, müssen Sie darauf achten, das
  207.    Sie MAKER benutzen und nicht MAKE. Außerdem sollten Sie die
  208.    Environment-Variable DOS16M auf den richtigen Wert (siehe Datei
  209.    readme.txt) setzen, wenn Sie den RSC2Z verwenden.
  210.  
  211.  
  212. F: Ich bekomme Link-Fehler. Was könnte ich falsch gemacht haben ?
  213. A: Haben Sie die SV.LIB oder die TOOLS.LIB dazugelinkt ?
  214.    Haben Sie mit den richtigen Schaltern übersetzt, da einige
  215.    Schalter auf das Namemangling Auswirkungen haben ?
  216.    Haben Sie eine globale Instanz von Ihrer Applikationsklasse angelegt ?
  217.  
  218.  
  219. F: Beim Anlegen neuer Project-Files für Borland 3.0 erhalte ich beim Linken
  220.    der Applikation "unresolved Externals".
  221. A: Da in der Borland-Umgebung bestimmte Switches und Parameter eingestellt
  222.    werden, ist es am einfachsten eine bestehende Projektdatei zu kopieren,
  223.    die alten Einträge zu löschen und die neuen Einträge aufzunehmen.
  224.